Помогите: автоматически выполняемый макрос
Пожалуйста подскажите новичку в такой проблеме:
Есть екселевский документ (Exel 2003). Есть макрос, который вносит в содержимое документа некоторые изменения.
Как сделать так, чтобы этот макрос выполнялся автоматически по событиям: открытие документа, активация нужной страницы?
Т.е. иначе говоря, например, выполнялся сам автоматически сразу при открытии документа.
Нигде не могу это найти.
Спасибо большое заранее!!
p.s. [FONT="Comic Sans MS"]Для других событий додумкаю по аналогии...[/FONT]
дальше щелчек по ЭтаКнига
или Лист
В открывшемся редакторе Workbook или Worksheet
рядом справа куча встроеных макросов: двойной щелчек, выбор и т.д
Загляните сюда: http://forum.codenet.ru/showthread.php?t=16768
В модуле кода интересующего Вас рабочего листа разместить макрос с заголовком:
[color=blue]Private Sub Worksheet_Activate()[/color]
точно работает :)
У меня теперь только один вопрос. Когда я пытался найти это в хелпаке,то наткнулся на такой примерчик в ивентах
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
End Sub
который того же результата, что и Workbook_Open (), не дал.
Просветите пожалуйста почему? И что я вообще такое нашел?
точно работает :)
У меня теперь только один вопрос. Когда я пытался найти это в хелпаке,то наткнулся на такой примерчик в ивентах
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
End Sub
который того же результата, что и Workbook_Open (), не дал.
Просветите пожалуйста почему? И что я вообще такое нашел?
Это относится к открытию ПРОИЗВОЛЬНОЙ книги. Эти события надо активировать особым образом через модули класса. А у тебя открытие конкретной книги. Поэтому этот вариант тебе не нужен.
===========
Вот ещё по поводу автоматического запуска макроса при открытии (это я пару лет назад объяснял по тому же поводу, а тебе просто скопирую):
Есть два способа:
Или разместить в обычном модуле макрос с названием
Auto_Open, или разместить в модуле книги макрос Workbook_Open.
Отличие между ними состоит в следующем:
Workbook_Open. Он запускается и при открытии "руками" и при открытии программно (с помощью Workbooks.Open) - если только перед этим не были отключены обработчики ошибок командой Application.EnableEvents = False.
Auto_Open. Запускается только при открытии руками, зато не отключается .EnableEvents
Скорее всего, тебе все равно, какой использовать. Я обычно использую Auto_Open. Чтобы иметь возможность открывать подобные файлы без запуска, у меня есть файлик с Workbooks.Open (я не очень люблю отключать-включать обработчики событий, использую это только в самых крайних случаях).
А про ячейки можешь что-нибудь подсказать, пожалуйста?
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
End Sub
который того же результата, что и Workbook_Open (), не дал.
Просветите пожалуйста почему? И что я вообще такое нашел?
Это пример работы с событием, относящимся к объекту Application (в Вашем случае это Excel). Найденный Вами пример должен быть использован в модуле кода класса. По сути это описание метода для некоего класса.
Вас же интересует событие объекта Workbook.
Прошу прощения за такую краткость, но подробнее отвечать пока некогда.
А про ячейки можешь что-нибудь подсказать, пожалуйста?
вопрос не мне, но отвечу (извини Cutty Sark)
1 - надо поймать событие изменения на листе
2 - проверть относится ли это событие к нужному диапазону
ниже пример для [A1]
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address <> "$A$1" Then Exit Sub
. . . .
End Sub
2 - проверть относится ли это событие к нужному диапазону
ниже пример для [A1]
End Sub
Так ведь изменения не только выделениями могут быть !?
И в поем случае диапазон не известен заранее, а определяется динамически...
я хотел спросить:
на странице есть произвольный набор выделенных диапазонов, в том числе и не связанных.
Как можно определить какие ячейки на странице выделены?