Страницы: 1
RSS
Объявление функции и переменной
 
Добрый день
у меня вопрос.
можно ли объявить в теле формы функцию и переменные так, чтобы макросы прописанные в модулях могли обращаться к ним
caustic
 
Нет. VBA не владеет данным видом наследования. Объявляйте переменные и функции в стандартном модуле как public и тогда сможете обращаться к ним откуда угодно в текущем проекте.
Я в подобных случаях создаю отдельный модуль, в котором у меня все переменные и функции уровня проекта.

Подробнее про объявление переменных я расписывал в этой статье: Что такое переменная и как правильно её объявить?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Про функцию не понял, а вот, чтобы переменные были доступны из любого модуля, их следует объявлять в стандартном модуле в области деклараций (перед самой первой процедурой) как глобальные:
Public x as String
 
Форма - это экземпляр класса.
Как в любом экземпляре класса, в форме могут быть локальные и глобальные переменные, пользовательские функции, процедуры (методы) и свойства. Форма может генерировать и пользовательские события.

Использование глобальных переменных в модуле класса не рекомендуется потому что модуль класса не имеет возможности контролировать, что могут сделать с глобальной переменной извне.
Обычно используются локальные переменные, а доступ к ним осуществляется с помощью Property Get, Let, Set.
При этом возможен контроль ошибок, типов и допустимых диапазонов переменных.

Пример кода формы UserForm1:
Код
' Код в форме
Public x
Dim y
Public Function MyFunction(v)
  MyFunction = v + x
End Function
Private Sub UserForm_Activate()
  x = 123
  y = 100
End Sub
Public Property Get GetY()
  GetY = y
End Property
Public Property Let LetY(v)
  y = v
End Property


Пример тестовой процедуры в Module1:
Код
' Код в стандартном модуле
Sub Test()
  UserForm1.Show 0
  DoEvents
  MsgBox UserForm1.x, , "Считываем x"  ' <-- Так не рекомендуется
  MsgBox UserForm1.MyFunction(-100), , "Используем MyFunction"
  UserForm1.LetY = "Hi!"
  MsgBox UserForm1.GetY, , "Используем Let,Get" ' <-- Let, Get корректнее
End Sub
Изменено: ZVI - 05.04.2013 19:16:21
Страницы: 1
Наверх