Передача параметров между формами

Передача параметров между формами может осуществлятся в двух направлениях.

· Родительская(вызывающая) -> Дочерняя(вызываемая)  
 
· Дочерняя -> Родительская  
 
   

В любом случае можно передавать параметры через глобальные переменные обьявленные в стандартном модуле.

Модули не являющиеся специфическими для конкретной формы или отчета, называются стандартными модулями.

Пример обьявления глобальной переменной.
Public strVariableName As String

После обьявления такой переменной можно получить или изменить её значение в любом месте где используется VBA.
Можно задать её значение в одной форме, затем изменить в другой, прочитать в третьей и.т.д.

Варианты передачи параметров Родительская -> Дочерняя

1)Передача одного параметра через метод OpenForm обьекта DoCmd

DoCmd.OpenForm имяФормы [, режим ] [, имяФайла ] [, условиеWhere ] [, режимДанных ] [, режимОкна ] [, аргументыОткрытия ]

В данной строке нас интересует аргумент [ аргументыОткрытия ]

Строковое выражение, определяющее значение свойства формы OpenArgs. В дальнейшем это значение может быть использовано в программе в модуле формы, например, в процедуре обработки события Открытие (Open).

Пример передачи значения в вызываемую форму
Private Sub Command1_Click()
DoCmd.OpenForm "MyForm2", , , , , , "привет"
End Sub

В вызываемой форме значение можно получить из свойства OpenArgs формы
Private Sub Form_Open(Cancel As Integer)
MsgBox Me.OpenArgs
End Sub

Для передачи нескольких аргументов можно воспользоваться функцией GetArgument

Варианты передачи параметров Дочерняя -> Родительская

1)Непосредственная передача в элементы родительской формы

В любую открытую форму можно передать значение просто сославшись на элемент этой формы
Forms![MyForm]![txtMy] = "Привет"

Такие ссылки легко создаются в Expression Builder (правда в редакторе кода в 2000 - 2002 отсутствует вызов Expression Builder)

2)Передача значений через создание пользовательских свойств

В модулях форм есть возможность создавать пользовательские свойства которые идентичны собственным свойствам формы.
В приведенном ниже коде создается пользовательское свойство MyProperties
Option Compare Database
Option Explicit
Private strMyProperties As String

'код для заполнения пользовательского свойства
Public Property Let MyProperties(ByVal vNewValue As Variant)
strMyProperties = vNewValue
End Property
'код для возврата значения пользовательского свойства
Public Property Get MyProperties() As Variand
MyProperties = strMyProperties
End Property

Получив ссылку на это свойство можно заполнить его из любой формы и полученное значение использовать по своему усмотрению.
Form_MyForm.MyProperties = varValue


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=8596