打扰一下,又出问题了
标准模块:
Public ws1 As Worksheet
Public rCopy As Range
工作簿_打开:
Set ws1 = Sheets("abc")
Set rCopy = ws1.Range("A1")
第三个模块:
ws1.Select ' Error
rCopy.Select ' Error
请帮忙。
如果第三个模块中的代码由于 Workbook_Open之后发生的某些事件而未被调用,则这两个变量仍未初始化。
您发布的代码确实有效。
您可能会收到错误的一个原因是,如果您一直在调试代码并且在某个时候出现错误并停止执行,则将不再设置公共变量。您只需要Workbook_Open
再次运行子程序(您可以从 IDE 运行它,使用F5
)
请注意,您应该从上一个问题中获得建议并使用Set ws1 = Thisworkbook.Sheets("abc")
. 如果您不这样做,您将面临在另一个工作簿中ws1
设置为工作表的风险abc
,因为正如所写的那样,它相当于Set ws1 = ActiveWorkbook.Sheets("abc")
那么私人成员和财产呢?
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