对不起,有些事情又错了 标准模块:
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
请帮忙。
答案 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