Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Excel VBA (часть 3)

Автор: Jizo
Дата сообщения: 01.06.2011 00:26
Скажи как мне правильно записать задание двойного диапазона с переменной i в Поиске решений ?
Чтобы суть была такова:
bychange : =" $ J$ 1 : $ J$ i, $ M $ 1 : $ M $ i " ,
Автор: asbo
Дата сообщения: 01.06.2011 06:20
Jizo, по аналогии с предыдущим примером:
bychange:="$J$1:$J$" & i & ",$M$1:$M$" & i
Автор: r18101989
Дата сообщения: 01.06.2011 14:26
дайте макрос для написания суммы прописью, именно макрос, без внедрения .bas файлов, так как документ будет постоянно перемещатся по компам, а обьяснять что куда скопировать что бы работало не охота
Автор: KF121
Дата сообщения: 01.06.2011 14:39

Цитата:
дайте макрос для написания суммы прописью, именно макрос, без внедрения .bas файлов, так как документ будет постоянно перемещатся по компам, а обьяснять что куда скопировать что бы работало не охота

а самому слобо написать? ничего экстраординарного для этого не надо.
Автор: r18101989
Дата сообщения: 01.06.2011 14:54
слишком много писать, может кто поделится готовым
Автор: asbo
Дата сообщения: 01.06.2011 15:29
r18101989

Цитата:
дайте макрос ...
...слишком много писать, ...

Нате
А жопу оторвать от стула не охота? Чой-то планктон совсем буреет... В поисковике при наборе сам просится.
Автор: r18101989
Дата сообщения: 01.06.2011 15:43
сделал так:

http://www.allok.ru/?id=14
Автор: asbo
Дата сообщения: 01.06.2011 15:45
* мне, как ты сказал, не похер что спрашивать...
- Может и так, а вот дойдет ли до читающего твое изложение видимо наплевать. Радуйся, что есть желающие читать между строк. И не льсти себе. Способностью грамотно и однозначно изложить свои мысли одарены далеко не все.

* ...у меня не стандартная задача...
- Повторюсь - не льсти себе.

*...и мне нужно именно то что я спрашиваю, ...
В третий раз - не льсти себе.

* ... и искать решение поставленной задачи никого не заставляю
- И в четвертый - не льсти себе. Именно такие, в случае неполучения ответа страдают поднятием тем. Радуйся, что тебе ответили (не пришлось поднимать тему) и ажна целыми тремя вариантами (три прочтения твоего "внятного" условия задачи, кстати).
Автор: andrewkard1980
Дата сообщения: 01.06.2011 17:59
Добрый вечер.
Колеги, есть ли возможность средствами VBA вставлять картинку в ячейку из интернета. Не могу разобратся с этим. Есть ли прямой способ, или нужно создавать папку, скидывать фотографии в нее, а потом вставлять их в ячейки? Спасибо.
Автор: Zloy_Gelud
Дата сообщения: 01.06.2011 18:21
Такой квест. Необходимо скопировать все Shape'ы и значения 2-х некоторых ячеек книги, при этом не открывая саму книгу, и вставить скопированное в книгу, из которой выполняется данный макрос.
Автор: asbo
Дата сообщения: 01.06.2011 19:30
Zloy_Gelud
Не открывая книгу... А комп включать можно? Сегодня 1 июня, не апреля :)
Не, серьезно, как к ней, к ее объектам обратиться не открывая?
Автор: ZlydenGL
Дата сообщения: 01.06.2011 19:37
Zloy_Gelud, может быть проще открыть, но как ReadOnly?
Автор: Zloy_Gelud
Дата сообщения: 01.06.2011 19:37
asbo -- Я рад, что у тебя есть чувство юмора Серьезно. Ну а я на самом деле находил инфу когда-то, как можно скопировать содержимое определенных ячеек, без открытия книги. Вот подумал, может и объекты можно скопировать также..

Добавлено:
ZlydenGL -- это то понятно, что можно. Можно и Visible = False, можно и GetObject заюзать, можно, наверное и еще что-нибудь, но хотелось бы, чтоб без открытия.
Автор: asbo
Дата сообщения: 01.06.2011 19:49
andrewkard1980
Я так озадачился этим "не включая", что забыл ответить :)

ActiveSheet.Pictures.Insert("http://i.ru-board.com/images/remake1.gif")

ZlydenGL
Цитата:
...находил инфу когда-то, как можно скопировать содержимое определенных ячеек, без открытия книги

Я так и подумал. Что-то подобное тоже блазится. Но, по моим ощущениям, что это из области недокументированного чтения формата Excel. Т.е. на бинарном уровне. То ли утилита какая-то, то ли библиотека... Не помню. С защитой-паролями связано вроде. Очень смутно. На уровне дежавю.
Автор: Niiks
Дата сообщения: 01.06.2011 20:19
Как сделать, что-бы при вводе какого-либо значения в определённую ячейку - раздавался бы звуковой сигнал
Может ли кто-то помочь (написать) скрипт или что-там для этого надо для решения моего вопроса?
Или это не так просто?
Автор: ZlydenGL
Дата сообщения: 01.06.2011 20:20
Zloy_Gelud, asbo, а смысл? Даже если открыть файл бинариком - системные данные поменяются (дата последнего доступа), так почему бы не задействовать Workbooks.Open ReadOnly:=True?
Автор: Zloy_Gelud
Дата сообщения: 01.06.2011 20:31
Вот код, позволяющий скопировать содержимое ячеек книги, не открывая (?) ее.

Код: Sub ggg()
iPath = "C:\"
iFile = "1.xlsx"
iList = "Лист1"
For i = 1 To 5
iAddress = "'" & iPath & "[" & iFile & "]" & iList & "'!" & Range("A" & i).Address(ReferenceStyle:=xlR1C1)
iData = ExecuteExcel4Macro(iAddress)
Sheets(1).Cells(i, 1) = iData
Next i
End Sub
Автор: asbo
Дата сообщения: 01.06.2011 21:00
Niiks, вот я выложил пример. Должно гудеть, если менять значение в ячейке C3. Когда запустите первый раз, откроется редактор VBA и остановится желтым на stop. Это Вам укажет ключевое место в коде - ссылку именно на эту ячейку. Stop надо закомментировать - поставить перед ним апостроф '
Автор: ZlydenGL
Дата сообщения: 01.06.2011 21:28

Цитата:
ExecuteExcel4Macro(iAddress)

Эта команда ОТКРОЕТ книгу Ёкселя, считает данные и ЗАКРОЕТ ее - ШТАТНЫМИ средствами Ёкселя. Так зачем же такой огород-то городить?
Автор: asbo
Дата сообщения: 01.06.2011 21:38
Zloy_Gelud
Хороший пример. Только я вот меня смутило это ExecuteExcel4Macro? Я всунул в ячейку строку =iAddress - показала. А вот напрямую из VBA присвоить занчение, т.е обратиться по этому iAddress не получилось.
А почему бы не так:

Код:
Sub ggg()
Dim i As Byte
Dim sPath$, sFile$, sList$, sAddress$

sPath = "F:\DOC\"
sFile = "rub_quest1.xls"
sList = "Sh1"
For i = 1 To 5
sAddress = "'" & sPath & "[" & sFile & "]" & sList & "'!" & "A" & i
With Sheets(1).Cells(i, 1)
.Formula = "=" & sAddress
.Value = .Value
End With
Next i
End Sub
Автор: Niiks
Дата сообщения: 01.06.2011 22:18

Цитата:
'Niiks, вот я выложил пример. Должно гудеть, если менять значение в ячейке C3. Когда запустите первый раз, откроется редактор VBA и остановится желтым на stop. Это Вам укажет ключевое место в коде - ссылку именно на эту ячейку. Stop надо закомментировать - поставить перед ним апостроф
asbo, я поставил апостроф.
Потом закрывая редактор вылетело сообщение: This command will stop the debugger.
Нажал ОК.
Но ничего в эксцеле не изменилось. Сколько не меняй значение в С3, ничего ''не бипкает''
Что я не так делаю


Автор: asbo
Дата сообщения: 02.06.2011 03:12
Niiks, ну и кнопочку "Сохранить" надо было попутно нажать. Больше эта команда (Stop) обрабатываться не будет. Это окно можно снова вызвать Alt+F11. В окне Inteermediate ниже, под кодом, вызывается Ctrl+G, написать Beep и нажать Enter. Должно бипнуть один раз. Но не на всякой машине. У меня ни на одной не гудит :) Это был первый подводный камень.

Да, если целевая ячейка - вычисляемая, с формулой, то этот номер не проходит. Надо по-другому. Это - второй камень. Но, речь-то была о "при вводе"

Апостроф, разумеется, английский - Alt+39 на цифровой клавиатуре.

Добавлено:
Вот, модифицированный вариант. Нашел таки часть архива. Где-то давно подтянул симпатичную демочку - не помню. Заточены три залитые ячейки.

Добавлено:
Это устраняет первый подводный камень. Но уже используется внешняя библиотека. Без хотя бы элементарных знаниев тут не обойтись :(( Надо хоть джю-джюдь программить...
Автор: ZlydenGL
Дата сообщения: 02.06.2011 08:55

Цитата:
Она откроет ее не как Workbook, а как-то иначе.

Неа, насколько я помню - именно как штатный Workbook! Только MDI-Child окно не развернет (т.е. откроет скрыто), считает что нужно и снова закроет. В общем это некий аналог кода

Код: Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set WB = Workbooks.Open(Filename, ReadOnly:=True, UpdateLinks:=False)
(что-то делаем с книгой)
WB.Close False
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Автор: ILL Le
Дата сообщения: 02.06.2011 10:54
Добрый день.
Никак не могу придумать как скопировать все e-mail из книги excel. Все они находятся в отдельном столбце, но страниц в документе много и вставляются они в ворд с таблицей, а хотелось бы просто через запятую. Есть ли возможность это организовать?
Автор: ZlydenGL
Дата сообщения: 02.06.2011 10:57

Цитата:
вставляются они с форд с таблицей, а хотелось бы просто через запятую

Можно "на пальцах", что подразумевается под этой волшебной фразой? Скорее всего ответ будет "да, есть", просто надо ТЗ увидеть для формирования примера формулы или скрипта.
Автор: ILL Le
Дата сообщения: 02.06.2011 11:05
ZlydenGL
Файл excel в котором N листов, на каждом листе в столбце E встречаются e-mail адреса (другой текст там тоже встречается). Нужно выбрать все e-mail адреса из столбца E на всех листах и поместить например в одну ячейку через запятую на новом листе.
Автор: asbo
Дата сообщения: 02.06.2011 11:23
ILL Le, вопрос-то к VBA имеет отношение или нет? Если нет, то в шапку. Первая красная строка.

Если имеет, то
1. Куда делся ворд? Уже забываем про него?
2. У ячейки есть ограничения, как на количество хранимых символов, так и отображаемых.
3. "...встречаются e-mail адреса (другой текст там тоже встречается)" - надо или расшифровать, или пример привести.
Автор: ZlydenGL
Дата сообщения: 02.06.2011 11:26

Код: For Each WS In Thisworkbook.Worksheets
For I = 2 To WS.Cells.SpecialCells(xlCellTypeLastCell).Row
If WS.Cells(I, 5) Like "*@*.*" Then Emails = Emails & ", " & WS.Cells(I,5)
Next I
Next WS
Emails = Right(Emails, Len(Emails)-2)
Автор: ILL Le
Дата сообщения: 02.06.2011 12:13
ZlydenGL
Т.е. если я в какую нибудь ячейку укажу выводить содержимое Emails то там будут все адреса, которые влезли в ячейку?
Делаю

For Each WS In Thisworkbook.Worksheets
For I = 2 To WS.Cells.SpecialCells(xlCellTypeLastCell).Row
If WS.Cells(I, 5) Like "*@*.*" Then Emails = Emails & ", " & WS.Cells(I,5)
Next I
Next WS
Emails = Right(Emails, Len(Emails)-2)

Range("С140").Select
Paste.Emails


Пробовал и Emails.Paste ошибку выдает. Не сильно силен в написании макросов, делал простейшие по копированию диапазонов ячеек и и прочими несложными операциями.

Добавлено:
asbo
1. Ворд - не ворд, не важно. Главное что бы отделить email адреса и сделать из них список разделенный ",".
2. Как быть?
3. Например встречается текст в одной строке "email" или "адрес клиента", а в строке ниже уже непосредственно "test@test.ru"
Автор: KF121
Дата сообщения: 02.06.2011 12:27

Цитата:
Emails.Paste

Emails - переменная, а не объект, чтобы вызывать у него метод паст. что мешает сделать Range("С140").Value = Emails? Вот вам и паст.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

Предыдущая тема: VS 2010


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.