我有一个带有按钮的表单,当我按下它时,它会打开另一个表单。当我关闭第二个表单时,我需要刷新第一个表单。
所以我需要在全局变量中插入第一个表单名称,以从第二个表单访问表单名称以刷新第一个表单。
我尝试创建这个:
global formname as form
formname = activeform.name
但我收到一条错误消息:该选项是只读的。
在Click
按钮的事件中,您可以将表单的名称作为 的OpenArgs
属性传递DoCmd.OpenForm
。
Private Sub Command4_Click()
DoCmd.OpenForm "frmStaff", , , , , , Me.Name
End Sub
在Close
第二种形式的情况下,您可以检查此(字符串)值:
Private Sub Form_Close()
If Me.OpenArgs <> "" Then
'MsgBox Me.OpenArgs
Forms(Me.OpenArgs).Refresh 'or .Requery
End If
End Sub
你为什么不直接进入后面的 VBA 代码并用 close sub 刷新它呢?我不明白需要在表单之间传递一个全局变量 - 你应该能够在你的第二种形式中做这样的事情:
Private Sub Form_Close()
Form_YourFormHere.Refresh
End Sub
如果您必须使用这种方法,请在第一个表单的模块中尝试:
Public formname as Form
Private Sub Command1_Click()
Set formname = Me
End Sub
或者
Public formname as String
Private Sub Command1_Click()
formname = Me.name
End Sub
表单是对象类型,只能使用 Set 语句赋值给变量,否则 VBA 会认为你是在尝试将对象的值赋值给变量。
您说您想要表单名称,但是您的变量是表单类型,而不是字符串。第一个代码片段将实现您似乎想要实现的结果,第二个代码片段将实现您所说的想要实现的结果。
不过,另一种方法可能会更好、更可靠。