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

» Excel VBA

Автор: RUSmafia
Дата сообщения: 14.10.2004 20:40



Обсуждаем вопросы только по Excel VBA
(программирование макросов, скриптов, пользовательских функций и т.п.).
Приветствуются ссылки на ресурсы и справочную литературу по теме.

Вопросы по работе с MS Excel, не относящиеся к программированию, задаем в теме Excel FAQ


Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)

Информация общего характера:
Список соответствия имен функций в английской и русской версиях Excel
Описание Microsoft Excel File Format

Рекомендации:
Если у Вас есть проблема, не решаемая стандартными средствами Excel (об этом можно уточнить здесь) или требующая автоматизации, попробуйте для начала записать макрос самим Excel через меню Сервис (Tools) - Макрос (Macro) - Начать запись (Record New Macro). Подробнее здесь. В большинстве случаев получившийся код (Сервис-Макрос-Макросы-Изменить) Вас не удовлетворит, но подскажет, какие объекты-методы-свойства использовать.
Другой Ваш помощник - Просмотр объектов (Object Browser). Ну и встроення помощь (F1), естественно.

Если Вы в тупике, покажите Ваш код (или часть кода) здесь. Если вылазит ошибка, цитируйте ее полностью. Если код слишком большой, используйте тeг [no][more][/no].
Используйте отладчик - Breakpoints (F9), Watches (Shift-F9), Steps (F8 и др.) Сильно облегчает поиск ошибок.

Рекомендуется к прочтению:
Первые шаги с Excel VBA
Excel VBA: Приёмы программирования
WinApi. Лекция из курса "Основы офисного программирования и язык VBA" (для продвинутых)
Daily Dose of Excel (eng.) - тематический блог: советы по работе с Excel и прочие материалы
Excel Macros & Excel VBA Code Tips, Tricks (eng.) - советы, трюки и уловки
Mr. Excel (forum) (eng.) - весьма оживленный форум по Excel&VBA.

Родственные топики:
Вопросы по работе с MS Excel - Excel FAQ - часть 1, часть 2
Технические проблемы с MS Office 2003 или Office XP.
Word VBA все вопросы по Word VBA туда
Access все вопросы по программированию в Access туда
Книжульки по VBA - книги по программированию с использованием VBA

Конкретные вопросы:
Форма-заставка
Как запустить макрос при изменении положения курсора или значения ячейки
Пример 1
Пример 2
Пример 3 (проверка области)
Пример 4
Пример 5
Зацикливание в функции Change или SelectionChange

Ранжирование без пробелов (макрос включает функции сортировки массива и удаления дубликатов, работает и в Excel 2007)
под Office 97

Добавление в главное меню своего пункта, ассоциированного с макросом
Создание ярлыка на рабочем столе
Снятие защиты листа при забытом пароле
Смена раскладки клавиатуры
Скролл формы колесом прокрутки мыши
Оптимизация кода по быстродействию использованием массивов
Автор: Smog
Дата сообщения: 14.10.2004 20:46
Private Sub Workbook_Open()
userform1.show
End Sub


где userform1 - это твоя форма-заставка...
Автор: RUSmafia
Дата сообщения: 14.10.2004 21:02

Цитата:
где userform1 - это твоя форма-заставка...

да нет.. надо что бы .gif или .jpeg заставка выскакивала..а потом сама через пару секунд проподала.
Автор: Troitsky
Дата сообщения: 14.10.2004 21:28
Так и размести эту картинку на форме, а форму вызывай так как тебе сказано.
Через пару секунд ее выгружай и грузи дальше то, что нужно.
Можешь свойство формы BorderStyle в None поставить.


Добавлено
Хм... глянул щас. Оказывается в VBA установка границ в None, в отличие от VB, ни к чему не приводит.

Добавлено
И такие безграничные формы даже импортировать не возможно. Хм...
Автор: RUSmafia
Дата сообщения: 14.10.2004 21:47
Troitsky

Цитата:
Хм... глянул щас. Оказывается в VBA установка границ в None, в отличие от VB, ни к чему не приводит.

хорошо,пусть будет простой userform с gif , и границы т.е само окно показывает. это всё так для демонстрационных целей..чтобы как-то в школе от других отличится
как сделать чтобы этот userform сам же через 5 сек закрылся!?

Добавлено
нашёл что искал, сейчас проверим на деле

http://www.ozgrid.com/Excel/excel-splash-screen.htm
Автор: Troitsky
Дата сообщения: 14.10.2004 22:26
Я вобще лучше в VB , чем в VBA разбираюсь. Щас вот обнаружил, что и таймера то там нет (а может есть, но я его просто не нашел ).
Так что за не имением лучшего можешь использовать такую конструкцию:

Код: UserForm1.Enabled = False
Start = Timer
Do While Timer < Start + 5
DoEvents
Loop
Unload UserForm1
Автор: Smog
Дата сообщения: 15.10.2004 06:15

Troitsky

Цитата:
Кажется, предложенный там вариант, даже, на много лучше.

ага, хитро



Цитата:
Application.OnTime Now + TimeValue("00:00:05"), "KillForm"

Автор: RUSmafia
Дата сообщения: 15.10.2004 20:20
теперь следующий вопрос, как запустить после этого второй UserForm , например UserForm2?
тоесть пять секунд показывает UserForm1, потом UserForm1 проподает и появляется UserForm2, с которым уже человек работает дальше.
Автор: Troitsky
Дата сообщения: 15.10.2004 21:24
Ну, если ты выбрал тот вариант, где "KillForm", тогда сделай так:

Код: Sub KillForm()
Unload UserForm1
UserForm2.Show
End Sub
Автор: RUSmafia
Дата сообщения: 15.10.2004 22:38

Цитата:
Sub KillForm()
Unload UserForm1
UserForm2.Show
End Sub

было бы всё так просто...не хочет так работать..
Автор: Troitsky
Дата сообщения: 15.10.2004 23:35
Что-то говорит? На что-то ругается? Может подсвечивает что?

Добавлено
Вобще, в чем нежелание работать заключается???
Должно вроде.
Автор: dneprcomp
Дата сообщения: 15.10.2004 23:40
А если так

Sub KillForm()
Load UserForm2
UserForm2.Show
Unload UserForm1
End Sub
Автор: RUSmafia
Дата сообщения: 16.10.2004 13:11
на дом. компе..допрограммировался..что файл..каждый раз при закрытии хочет сохраниться..а потом жалуется что не хватает памяти..
userforms сразу оба открывались...
на другом компе Win2000Prof/Excel 2000 попробывал, всё чудно работает
Автор: Smog
Дата сообщения: 19.10.2004 17:26
как отследить изменение значения ячейки?
Автор: merlkerry
Дата сообщения: 20.10.2004 10:32
Smog

Цитата:
как отследить изменение значения ячейки?


ты не про эт случаем ???

Код: Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub
Автор: Smog
Дата сообщения: 20.10.2004 14:04
merlkerry

Цитата:
ты не про эт случаем ???

не не про это...почитал разобрался

Цитата:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

это смена выделенной ячейки , а я про это:

Цитата:

Private Sub Worksheet_Change(ByVal Target As Range)

End Sub

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

Автор: daru
Дата сообщения: 28.10.2004 15:54
Хочу поразбирать строки против регулярных выражений (RegEx).

Покажите хоть куда здесь копать, а то от VBA от PHP как-то уж слишком отличается...
Автор: RUSmafia
Дата сообщения: 05.11.2004 10:08
srochno nushno editor dla struktogramm w vba(something like visio). pomogite please.


Добавлено
wopros snimaetsa.. programmka nasiwaetsa StruktEd
Автор: yuraskas
Дата сообщения: 10.11.2004 14:50
Народ, помогите, на форме находиться комбо и кнопка. Переменная (mmm - например), которую я задал в Private Sub для комбо, не видна в Private Sub для для кнопки. Очивидно гдето задается глобальная переменная. Подскажите плиз - где и как?
Автор: Smog
Дата сообщения: 10.11.2004 16:43
yuraskas

Цитата:
Подскажите плиз - где и как?

в модуле любом
Public mmm [as integer/string etc.]
Автор: john60
Дата сообщения: 11.11.2004 08:09
Уважаемые спецы по VBA подскажите бестолковому.
Ручками сохраняю таблицу EXCEL в формате CSV (MS-DOS), получаю текст с разделителями ";" (что мне и надо).
Выполняю в макросе
ActiveWorkbook.SaveAs Filename:= _
"Filename.txt", FileFormat:=xlCSVMSDOS
получаю разделители "," и впридачу расширение .csv
Автор: Tropin
Дата сообщения: 11.11.2004 09:41
john60
Действительно, похоже на баг :)
Автор: Troitsky
Дата сообщения: 11.11.2004 20:25

Цитата:
и впридачу расширение .csv

При сохранении с использованием твоего кода сохраняет файлом "*.txt" без приписки ".csv".

Касательно разделителя: похоже в твоем случае просто игнорируется разделитель, установленный ключем Format (=Delimited(;)) раздела HKEY_LOCAL_MACHINE\software\Microsoft\jet\4.0\engines\text реестра.
Да и не было, по-моему, конкретной определенности по поводу разделителя в csv-файлах. Вроде в версиях выше XP жестко остановились на ";". Описанное тобой явление может быть отголоском этих разногласий.
Автор: yuraskas
Дата сообщения: 15.11.2004 09:29
А подскажите, как сделать: допустим у меня котовый макрос, как сделать чтобы при запуске excel'ского файла, кнопка автоматически добавлялась в меню. А то допустим на другом компе ее пришлось вручную ставить.
Автор: Troitsky
Дата сообщения: 15.11.2004 19:23
Какая кнопка и в какое меню?
Автор: yuraskas
Дата сообщения: 16.11.2004 06:31
Своя кнопка макроса, да в любом меню, ну например "Данные" или рядом с основными кнопками екселя, главное, как прописать чтобы она появлялась на любой машине, где я запускаю совой екселевский файл.

Добавлено
И еще один очень важный вопросик: Есть лист с фамилиями, есть форма с listbox где тоже фамилии. Нужно чтобы при выборе в listboxе фамилии, она производила поиск на листе, и если такая же фалмилия находилась, она выделялась.
Подскажите плз, а то чет не получается никак.
Автор: Troitsky
Дата сообщения: 17.11.2004 10:34
yuraskas
Например:

Код:
Private Sub Workbook_Open()
Set MyMenu = Excel.Application.CommandBars("Data").Controls.Add(Type:=msoControlButton, ID:=850)
With MyMenu
.Caption = "Мой макрос" ' Наименование твоего пункта меню
.OnAction = "Макрос1" ' Имя твоего макроса
End With
End Sub
Автор: Smog
Дата сообщения: 17.11.2004 12:41
Troitsky

Цитата:
Этот, код при открытии книги, добавляет в меню "Данные" пункт "Мой макрос", при выборе которого выполняется Макрос1.

а удалять этот пункт меню при закрытии не надо?
yuraskas

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

Что именно выделялось? ячейка, содержащая фамилию?



Код: Private Sub ListBox1_Click()
Cells.Find(What:=ListBox1.ListIndex, After:=ActiveCell, LookIn:=xlValues, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
End Sub
Автор: Troitsky
Дата сообщения: 17.11.2004 19:49
Smog

Цитата:
а удалять этот пункт меню при закрытии не надо?


Код: Private Sub Workbook_BeforeClose(Cancel As Boolean)
Excel.Application.CommandBars("Data").Controls(Excel.Application.CommandBars("Data").Controls.Count).Delete
End Sub
Автор: Smog
Дата сообщения: 17.11.2004 20:24
Troitsky
так-то лучше

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Стоит ли переходить с Билдера на Делфи?


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