我发现了一个类似的问题,但它并没有完全回答我的问题。以下是其他问题的链接:VBA duplicated declaration in "if...else"
我想测试一个变量是否存在。如果是,我希望将其设置为false,否则我想声明它然后将其设置为false。这是代码:
If SR1 Is Nothing Then
Dim SR1 As Boolean
SR1 = False
Else
SR1 = False
End If
据我所知,我无法在当前范围内声明此代码,但如何实现相同的逻辑呢? 我希望该变量适用于另一个将测试它是否为true / false的子。这是在我的表单的初始化子中清除表单中的所有字段并重置某些值。我也有一个清晰的形式"单击时运行初始化子的按钮。在这方面,我的代码块运行了多次,我不能简单地声明变量。
答案 0 :(得分:0)
我认为您正在寻找的是全局形式变量。如果是这种情况,那么你想要做的是将它声明为你的潜艇的外部。
所以:
Private SR1 As Boolean
Sub Form_Load()
SR1 = False 'or set it however you want
End Sub
Sub mySub1()
SR1 = False
.......
End Sub
Sub mySub2()
If SR1 = False Then
......
Else
......
End If
End Sub
注意"没什么"是Object变量的未实例化状态(请参阅此处:http://allenbrowne.com/vba-NothingEmpty.html)。布尔值不是一个对象,并且它没有被实例化"最初设置为false,因此,从技术上讲,您甚至不需要在加载表单中将其设置为false,因为打开表单时它已经是假的。
如果要在不在表单中的子中使用变量,则需要在调用表单的子FROM时将其作为参数传递,或者将其声明为模块中的全局变量,以便它将在整个数据库的范围内。但是,无论何时使用它,您都需要确保正确设置它。
另请注意,我已将变量设为私有。如果你公开,那么其他表单将能够访问它,但这给其他表单提供了太多的控制。如果您需要从另一个表单更改变量,请创建一个sub来执行此操作,或者如果您需要访问该值,请创建一个函数以将其返回。