我的Module1宏没有看到工作表代码中声明的变量值。知道为什么会这样吗?一切都是公开的。
在我的工作表中,我有这个:
Public oldVal As Variant
Public Sub Worksheet_SelectionChange(ByVal Target As Range)
oldVal = Target.Value
End Sub
在Module1中我有一个宏连接到一个按钮,应该(出于测试目的)只打印oldVal,但它不起作用。消息框为空。
Public Sub button_Click1()
MsgBox oldVal
End Sub
知道它为什么没有从工作表中获取变量“OldVal”的值?
感谢。
答案 0 :(得分:1)
您应该在常规模块中声明您的公共变量以避免这种情况。
因为Sheet的模块,ThisSession,ThisWorkbook,...是类的模块,因此您声明的变量被视为该类/对象的属性。
您的常规模块代码
Public oldVal As Variant
Public Sub button_Click1()
MsgBox oldVal
End Sub
您的图表模块代码
Public Sub Worksheet_SelectionChange(ByVal Target As Range)
oldVal = Target.Value
End Sub
答案 1 :(得分:0)
oldVal
就像一个类的属性,其中class是工作表。因此,也要使用工作表的名称,例如MsgBox Sheet1.oldVal
也许变量oldVal
应该在工作表的类中实现为只读属性。因此,只有在选择更改时才能在类中设置值,而不是从工作表类的外部设置。如下所示。
工作表类模块:
Private m_oldVal As Variant
Public Property Get OldVal() As Variant
OldVal = m_oldVal
End Property
Public Sub Worksheet_SelectionChange(ByVal Target As Range)
m_oldVal = Target.Value
End Sub