Excel 当在其他模块中访问表单变量时,将自动调用UserForm_Initialize()
我试图将一些公开声明的userform变量的值放入其他表单中编写的其他模块中 第一个myform.show函数初始化表单并设置Excel 当在其他模块中访问表单变量时,将自动调用UserForm_Initialize(),excel,vba,userform,Excel,Vba,Userform,我试图将一些公开声明的userform变量的值放入其他表单中编写的其他模块中 第一个myform.show函数初始化表单并设置i=0。但是当我使用x按钮关闭表单并使用queryclosed函数更新I的值并控制返回Myform.val=10行时,再次调用userform\u initialize()函数,条件变为false,因为它再次将I设置为0。我不知道为什么会这样。请帮忙 我的工作表模块代码如下: Sub myModule() Myform.Show If Myform.val
i=0
。但是当我使用x按钮关闭表单并使用queryclosed函数更新I
的值并控制返回Myform.val=10
行时,再次调用userform\u initialize()
函数,条件变为false
,因为它再次将I
设置为0
。我不知道为什么会这样。请帮忙
我的工作表模块代码如下:
Sub myModule()
Myform.Show
If Myform.val=10 then
msg "Hi"
End if
End sub
Public i as integer
Private Sub UserForm_Initialize()
i = 0
End sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode <> 1 Then
i = 10
End If
End Sub
我的表格代码如下:
Sub myModule()
Myform.Show
If Myform.val=10 then
msg "Hi"
End if
End sub
Public i as integer
Private Sub UserForm_Initialize()
i = 0
End sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode <> 1 Then
i = 10
End If
End Sub
Public i作为整数
私有子用户表单_初始化()
i=0
端接头
私有子用户表单_QueryClose(取消为整数,关闭模式为整数)
如果关闭模式1,则
i=10
如果结束
端接头
如果使用x按钮关闭表单,我希望上述if条件为true;如果使用commandbutton关闭表单,则希望上述if条件为false。我想建议一些更改。这些都不是必需的,但它将帮助您保持代码整洁。
首先,使用表单的实例,而不是表单。第二,使用属性而不是全局变量。第三,如果卸载表单,则无法再访问其值 模块
Sub myModule()
Dim MyFormInstance As MyForm
Set MyFormInstance = New MyForm
MyFormInstance.Show
If MyFormInstance.Val = 10 Then
MsgBox "Hi"
End If
Unload MyFormInstance
End Sub
形式呢
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode <> 1 Then
Cancel = 1
Me.Hide
i = 10
End If
End Sub
Property Get Val() As Integer
Val = i
End Property
Private Sub btnClose_Click()
i = 20
Me.Hide
End Sub
Private Sub-UserForm\u QueryClose(取消为整数,关闭模式为整数)
如果关闭模式1,则
取消=1
我,藏起来
i=10
如果结束
端接头
属性Get Val()为整数
Val=i
端属性
专用子btnClose_Click()
i=20
我,藏起来
端接头
我想提出一些修改建议。这些都不是必需的,但它将帮助您保持代码整洁。首先,使用表单的实例,而不是表单。第二,使用属性而不是全局变量。第三,如果卸载表单,则无法再访问其值 模块
Sub myModule()
Dim MyFormInstance As MyForm
Set MyFormInstance = New MyForm
MyFormInstance.Show
If MyFormInstance.Val = 10 Then
MsgBox "Hi"
End If
Unload MyFormInstance
End Sub
形式呢
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode <> 1 Then
Cancel = 1
Me.Hide
i = 10
End If
End Sub
Property Get Val() As Integer
Val = i
End Property
Private Sub btnClose_Click()
i = 20
Me.Hide
End Sub
Private Sub-UserForm\u QueryClose(取消为整数,关闭模式为整数)
如果关闭模式1,则
取消=1
我,藏起来
i=10
如果结束
端接头
属性Get Val()为整数
Val=i
端属性
专用子btnClose_Click()
i=20
我,藏起来
端接头
将MyFormInstance设置为MyForm
?这对我来说是新的,请将我链接到这方面的文档。我很好奇。@JvdV,表单在许多方面都与类模块相同,但仍然useful@JvdV…UserForm只是一个类,您可以/应该这样使用它(而不是引用默认实例);你可能会在@Hi sam得到一些推荐信。首先,非常感谢,你的答案解决了问题。我并没有做太多的更改,只是在查询响应函数中添加了cancel=1和me.hide行,就像你们的一样,它可以正常工作。第二,我只是检查给定问题中的if语句是否错误。在if条件中,而不是myform.val,它是myform.i…但无论如何,你解决了它..谢谢..但我仍然不知道为什么myform.i在我的原始代码中调用userform\u initialize函数…如果你能指出原因,它会很有帮助..当你关闭表单时,保存它的变量被重置。由于您使用了隐式实例化,所以它是从头开始创建的。当您更改为.Hide
时,所有这些都发生了更改。变量永远不会重置,并且您可以使用所有变量。Dim MyFormInstance As MyForm
?这对我来说是新的,请将我链接到这方面的文档。我很好奇。@JvdV,表单在许多方面都与类模块相同,但仍然useful@JvdV…UserForm只是一个类,您可以/应该这样使用它(而不是引用默认实例);你可能会在@Hi sam得到一些推荐信。首先,非常感谢,你的答案解决了问题。我并没有做太多的更改,只是在查询响应函数中添加了cancel=1和me.hide行,就像你们的一样,它可以正常工作。第二,我只是检查给定问题中的if语句是否错误。在if条件中,而不是myform.val,它是myform.i…但无论如何,你解决了它..谢谢..但我仍然不知道为什么myform.i在我的原始代码中调用userform\u initialize函数…如果你能指出原因,它会很有帮助..当你关闭表单时,保存它的变量被重置。由于您使用了隐式实例化,所以它是从头开始创建的。当您更改为.Hide
时,所有这些都发生了更改。变量永远不会重置,并且您可以使用所有变量。