Как выполнить код только один раз (при запуске программы?)

Программирование на Visual Basic for Applications
batmax
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 06.08.2004 (Пт) 20:32

Как выполнить код только один раз (при запуске программы?)

Сообщение batmax » 06.08.2004 (Пт) 20:34

Как известно, At module level, you can use only comments and declarative statements. Значит, весь исполняемый код должен лежать внутри Procedures (к ним относятся Sub и Functions, а также Properties).
Но как же тогда выполнить что-либо (например, инициализацию переменных начальными значениями) ТОЛЬКО ОДИН РАЗ ? (при запуске ?)
Можно описать объектную переменную Dim Myvar as NEW MyClass, чтобы она проинициализировалась при первом её использовании (хотя это немного не то), но методов-конструкторов в VBA тоже нету ...
В первой своей (и пока единственной) программе на VBA я выкрутился таким образом: объявил булевскую переменную-флаг и проверяю её значение в каждой процедуре. Если она False (такое значение имеют сначала все булевские переменные по умолчанию), - вызываю процедуру инициализации, и присваиваю флагу True.
Но, по-моему, это неграмотно, потому что быстродействие страдает. А как надо правильно ?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.08.2004 (Пт) 21:43

В окне редактора сверху есть два комбобокса. В левом из них (там стоит (General)) выбери Document, в правом - Open
В создавшейся процедуре Document_Open пиши свой код.

Кроме того,
Auto Macros
See Also Specifics

By giving a macro a special name, you can run it automatically when you perform an operation such as starting Microsoft Word or opening a document. Word recognizes the following names as automatic macros, or "auto" macros.

Macro name When it runs
AutoExec When you start Word or load a global template
AutoNew Each time you create a new document
AutoOpen Each time you open an existing document
AutoClose Each time you close a document
AutoExit When you quit Word or unload a global template

Auto macros in code modules are recognized if either of the following conditions are true.

    The module is named after the auto macro (for example, AutoExec) and it contains a procedure named "Main."
    A procedure in any module is named after the auto macro.
Just like other macros, auto macros can be stored in the Normal template, another template, or a document. In order for an auto macro to run, it must be either in the Normal template, in the active document, or in the template on which the active document is based. The only exception is the AutoExec macro, which will not run automatically unless it is stored in one of the following: the Normal template, a template that is loaded globally through the Templates and Add-Ins dialog box, or a global template stored in the folder specified as the Startup folder.

In the case of a naming conflict (multiple auto macros with the same name), Word runs the auto macro stored in the closest context. For example, if you create an AutoClose macro in a document and the attached template, only the auto macro stored in the document will execute. If you create an AutoNew macro in the normal template, the macro will run if a macro named AutoNew doesn't exist in the document or the attached template.

Note You can hold down the SHIFT key to prevent auto macros from running. For example, if you create a new document based on a template that contains an AutoNew macro, you can prevent the AutoNew macro from running by holding down SHIFT when you click OK in the New dialog box (File menu) and continuing to hold down SHIFT until the new document is displayed. In a macro that might trigger an auto macro, you can use the following instruction to prevent auto macros from running.
Код: Выделить всё
WordBasic.DisableAutoMacros


Андрей Васюта
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 91
Зарегистрирован: 20.07.2004 (Вт) 19:40

Сообщение Андрей Васюта » 12.08.2004 (Чт) 19:39

Private Sub Workbook_Open()
'прописываеш свой код сюда, и он будет выполняться только _
при открытии документа
End Sub
Большой программе - большие глюки.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 54

    TopList  
cron