工作表和模块之间的变量不合作

时间:2015-11-19 08:34:50

标签: excel vba excel-vba module worksheet

我的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”的值?

感谢。

2 个答案:

答案 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