0

打扰一下,又出问题了
标准模块:

Public ws1 As Worksheet
Public rCopy As Range

工作簿_打开:

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

第三个模块:

ws1.Select ' Error
rCopy.Select ' Error

请帮忙。

4

3 回答 3

3

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

于 2012-09-17T06:30:39.590 回答
2

您发布的代码确实有效。

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

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

于 2012-09-17T06:31:45.397 回答
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
于 2012-09-17T08:19:36.517 回答