模块不会看到公共变量

时间:2012-09-17 06:18:08

标签: excel vba variables

对不起,有些事情又错了 标准模块:

Public ws1 As Worksheet
Public rCopy As Range

Workbook_Open:

Set ws1 = Sheets("abc")
Set rCopy = ws1.Range("A1")

第三个模块:

ws1.Select ' Error
rCopy.Select ' Error

请帮忙。

3 个答案:

答案 0 :(得分:3)

如果由于在 Workbook_Open之后发生的某些事件而未调用第3个模块中的代码,则这两个变量仍然未初始化。

答案 1 :(得分:2)

您发布的代码 有效。

您可能遇到错误的一个原因是,如果您一直在调试代码并且在某些时候出现错误并停止执行,则将不再设置公共变量。您只需再次运行Workbook_Open sub(您可以使用F5从IDE运行它)

请注意,您应该从上一个问题中获取建议并使用Set ws1 = Thisworkbook.Sheets("abc")。如果不这样做,您将面临将ws1设置为另一个工作簿中的工作表abc的风险,因为编写时它等同于Set ws1 = ActiveWorkbook.Sheets("abc")

答案 2 :(得分:1)

那么私人会员和财产呢?

Option Explicit

Private m_mySheet As Worksheet
Private m_myRange As Range

Public Property Get MySheet() As Worksheet
    If (m_mySheet Is Nothing) Then
        Set m_mySheet = ThisWorkbook.Worksheets("abc")
    End If
    Set MySheet = m_mySheet
End Property

Public Property Get MyRange() As Range
    If (m_myRange Is Nothing) Then
        Set m_myRange = MySheet.Range("A1")
    End If
    Set MyRange = m_myRange
End Property

Option Explicit

Sub test()
    Debug.Print MyRange.Address
End Sub