Страница: 1 |
Страница: 1 |
Вопрос: Изменение кода макросом
Добавлено: 23.10.07 02:21
Автор вопроса: DrugON | ICQ: nospam
Не знаю - правильно ли назвал вопрос. Суть вот в чем. Существует огромное количество сводок. При открытии каждой (при помощи Private Sub WorkBook_Open()) открывается еще одна, связанная с ней, книга. Дело в том, что изменился путь этой самой книги. С новыми сводками все в порядке, а вот каким образом изменить Private Sub WorkBook_Open() в старых? В идеале мне все видится так- задается начальная дата, открывается сводка за эту дату, в Private Sub WorkBook_Open() вносится нужное изменение, книга сохраняется, закрывается, к начальной дате прибавляется 1, открывается следующая и т.д. Вручную я буду это делать до китайской Пасхи.
И второй вопрос, дабы не плодить топики - можно ли таким же образом (т.е. массово) импортировать в книги модули?
Главное - сама возможность, время выполнения не столь важно (понимаю, что это будет очень долго выполняться, если открывать каждую книгу). Заранее премного благодарен за советы!
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
Nytrogen
Вопросов: 18
Ответов: 186
Профиль | | #1
Добавлено: 23.10.07 18:49
Импортировать модули в проект можно при помощи объекта VBProject:
ThisWorkbook.VBProject.VBComponents.Import путь/файлСКодомМодуля.bas
Для того чтобы это работало, в редакторе VBA необходимо установить ссылку на объект VBIDE:
в окне Tools/References нужно поставить галочку рядом с записью Microsoft Visual Basic Extensibility Library.
Также необходимо включить "доверие" всем макросам в самом Excel'е:
в окне Tools/Macro/Security/Trusted Publishers нужно поставить галочку Trust Access To Visual Basic Project.
Номер ответа: 2
Автор ответа:
Nomy
Вопросов: 0
Ответов: 2
Профиль | | #2
Добавлено: 23.11.07 16:16
Алекс,
в Вашем случае лучше не привязываться жестко к пути, а брать его, скажем, из третьего файла - тогда, при смене путей, никаких программных изменений не понадобиться.
А тема очень полезная. У меня вопрос: с модулем все ок. А как можно добавить макрос программным способом не в модуль, а в определенный лист? форму? книгу?
Номер ответа: 3
Автор ответа:
DrugON
ICQ: nospam
Вопросов: 10
Ответов: 53
Профиль | | #3
Добавлено: 07.12.07 07:54
во-во... Иногда мне нужно внести изменение в модулях в большом количестве книг. Как-то ведь можно импортировать модули программно?
Номер ответа: 4
Автор ответа:
Nomy
Вопросов: 0
Ответов: 2
Профиль | | #4
Добавлено: 10.12.07 13:10
Именно так, как описал Nytrogen - я сам попробовал, все ок.
Но ИМХО это палить из пушки по воробьям. Проще в том коде, который открывает другую книгу, не привязываться к пути, а держать, к примеру, какую-то еще книгу или лист, с перечнем путей, по которым хранятся файлы. И брать значения путей оттуда, а не писать прямо (и не заменять впоследствии целый модуль кода).
Заменять код - не лучший стиль для программирования ИМХО..