工作表和模块之间的variables不合作

我的Module 1macros没有看到工作表代码中指定的variables的值。 任何想法,为什么? 一切都是公开的。

在我的工作表中有这样的:

Public oldVal As Variant Public Sub Worksheet_SelectionChange(ByVal Target As Range) oldVal = Target.Value End Sub 

在Module1中,我有一个macros连接到一个button,应该(为了testing目的)只是打印oldVal,但它不工作。 消息框是空的。

 Public Sub button_Click1() MsgBox oldVal End Sub 

任何想法为什么它没有从工作表中获取variables“OldVal”的值?

谢谢。

您应该在常规模块中声明您的公共variables以避免这种情况。

由于工作表的模块,ThisSession,ThisWorkbook,…是类的模块,所以您声明的variables被视为该类/对象的属性。


您的常规模块代码

 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 

oldVal就像一个类的属性,其中class是工作表。 因此,使用工作表的名称以及MsgBox Sheet1.oldVal

也许variablesoldVal应该被实现为工作表类的只读属性。 因此,只有在select更改时才可以在类中设置值,而不能从工作表类以外进行设置。 像下面这样。

工作表类模块:

 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