Тема: Подключение модуля...

Такс...прошу ответа на детский вопрос...
Я всё время работаю с модулем формы и вопросов не возникает..
А если к проекту просто добавить обычный модуль "Вставка->module" и написать там код, то при запуске формы этот модуль игнорируется...что нужно прописать в модуле,чтобы модуль тож работал вместе с формой???

Re: Подключение модуля...

Из модуля делаешь вызов формы типа <ИмяФормы>.Show а в форму втыкаешь кнопку типа Оk, щелкаешь на ней и в событии нажатия на кнопку прописываешь <ИмяФормы>.Hide. В результате управление возвращается в вызвавший форму модуль.

Re: Подключение модуля...

Это почти то,что нужно...но в вашем случаи форма вызывается из модуля, а мне нужно наоборот..т.е на форме кликаю "ок" и вызывается опр. модуль..

Re: Подключение модуля...

Не понимаю проблемы. Ну есть событие, например, btn_Click. Есть процедура Sub Test(). Ну и прописывается в btn_Click:

Privatу Sub btn_Click()
  Test
Enв Sub

В чем трудность?

Re: Подключение модуля...

Неее..или я не понимаю или вы...
Так, по порядку, выложу код, а вы укажите на ошибку)
В UserForm1 есть событие
Private Sub CommandButton1_Click()
'текст программы
End Sub
Далее в module1 следующий код
Private Sub Tmd()
'текст программы
End Sub
Конкретно,что и где нужно дополнить,чтобы по событию CommandButton1_Click вызывалась Tmd() из модуля?

Re: Подключение модуля...

Так не работает!!!
Private Sub CommandButton1_Click()
Tmd
End Sub

Re: Подключение модуля...

Замени

Private Sub Tmd()

на

Sub Tmd()

Вопрос в видимости переменных, процедур и функций.

Re: Подключение модуля...

Эврика!!!!!!!!! СПАСИБИЩЕ!!! Строго не судите...я не давно сел за VBA)))

Re: Подключение модуля...

На всякий случай (гуру VB(A) наверняка меня поправят / дополнят):
Переменные, объявленные с помощью Dim внутри функции / процедуры, видны только внутри нее. В случае совпадения с глобальными именами локальные имеют более высокий приоритет и делают "невидимыми" значения глобальных переменных.
Переменные, объявленные с помощью Dim вне процедур (внутри модуля / формы) примерно таким образом:

Option Explicit
Dim Var1 As Long
Dim Var2 As String

видимы только внутри модуля, в котором они описаны.
Модификаторы доступа (Private / Public / Global) меняют доступность процедур / функций и переменных. Процедура / функция, объявленная с модификатором Private, доступна и видна только внутри того модуля, где она описана. Public применяется как для процедур / функций, так и для переменных и делает их доступными для всех модулей и форм проекта; правила видимости для процедур / функций аналогичны правилам для переменных). Global, как правило, относят только к константам. Поведение аналогично Public.
По умолчанию (при отсутствии явного модификатора) для процедур / функций применяется Public.
То есть (теоретически) вполне допустимым будет такая конструкция (теоретически - потому, что я такого стараюсь избегать и полного тестирования не проводил):

' Module mdlMain
Dim lCounter As Long ' *
Sub TestSub()
Dim lCounter As Integer ' **
  lCounter=-15 ' Работаем с переменной **
End Sub
Private Sub TestSub1()
  MsgBox "Private"
  lCounter=10 ' Работаем с переменной *
End Sub
'Module mdlTestingModule
Sub TestSub1()
  lCounter = 20 ' Работаем с переменной *
  MsgBox "Public"
End Sub

Re: Подключение модуля...

> Кулик Алексей aka kpblc
В случае совпадения с глобальными именами локальные имеют более высокий приоритет и делают "невидимыми" значения глобальных переменных.

Это свойство называется оттеснением. Переменная расположенная ближе оттесняет переменную расположенную дальше от точки обращения.
Цитата из Руководства по Visual Basic 6.0 от Microsoft:
"Оттеснение может приводить к путанице и трудноуловимым ошибкам в коде. Поэтому рекомендуется переменным давать уникальные имена".
В заключение, позвольте и мне со своей стороны присоединиться к этим рекомендациям.