Вопрос № 40069: Добрый день!
MS Office 2000. Подскажите, можно ли сделать так чтобы при запуске определенного файла Excel (например, file.xls) запускался макрос (он чистит определенные ячейки, это я знаю как написать). В этот файл нельзя встроить макрос - он пер...
Вопрос № 40.069
Добрый день!
MS Office 2000. Подскажите, можно ли сделать так чтобы при запуске определенного файла Excel (например, file.xls) запускался макрос (он чистит определенные ячейки, это я знаю как написать). В этот файл нельзя встроить макрос - он пересоздается каждый день программно (код программы закрыт).
Если создать файл personal.xls в папке XLStart с макросом auto_open(), то при открытии отрабатывает макрос, а только потом открывается запущенный файл.
Отвечает: Genyaa
Здравствуйте, Иванов Дмитрий Дмитриевич!
Да, можно. С помощью событий Application.
Используя код в Приложении:
1. Создайте в personal.xls модуль класса с именем EventClassModule
2. Введите в этот модуль код №1 из Приложения.
3. В модуль самой книги personal.xls введите код №2 из Приложения.
4. После этого выйдите из Excel с сохранением файла personal.xls и войдите вновь.
Теперь при попытке открытия файла только с именем указанным в коде №1 (file.xls) будет запускаться часть кода, куда и можно будет включить нужную обработку этого файла.
Суть решения в том, что при входе в Excel автоматически открывается personal.xls, в который включен обработчик события на открытие Workbook_Open (должен быть создан в модуле книги).
Таким образом при открытии personal.xls Workbook_Open запускает (активизирует) модуль класса в personal.xls под именем EventClassModule, который в свою очередь активизирует возможность работы с объектом Application и устанавливает на уровне Application обработчик события App_WorkbookOpen, запускающийся при открытии любой книги в Excel. Соответственно достаточно проверять имя открывающегося файла (If Wb.Name = "file.xls" Then) или любой другой нужный признак, чтобы запустить нужную обработку нужного
файла.
Заметьте, что директива Dim X As New EventClassModule в коде №2 должна ссылаться на имя, совпадающее с именем модуля класса, активизирующего работу с объектом Application.
Приложение:
--------- Всякое решение плодит новые проблемы.
Ответ отправил: Genyaa (статус: 3-ий класс)
Ответ отправлен: 12.04.2006, 10:55 Оценка за ответ: 5