我想在打开文件时将全局变量定义为工作表,因此我使用了以下代码:
在模块 1 中:
Public mySheet As Worksheet
在本工作簿中:
Sub Workbook_Open()
Set mySheet = Sheet1
End Sub
然后我想使用
mySheet
在各种过程中引用这个特定的工作表,其中一些引用打开一个新文件的这个工作表。它最初有效 - 当我打开文件时,变量已设置,并且涉及
mySheet.Unprotect
、 mySheet.Protect
和 mySheet.Range("A1")
的宏有效。但是,当我再次尝试运行它时,我收到错误 Object variable or With block variable not set
,并且调试将我带到 mySheet.Unprotect
行,这是第一次引用工作表。如何在全局变量中定义此工作表,以便定义保持不变?
作为引用,我所指的特定宏如下,尽管我在不同的代码位上遇到了类似的问题:
Sub mySub()
mySheet.Unprotect
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
If .Show <> 0 Then
mySheet.Range("A1") = .SelectedItems(1)
End If
End With
mySheet.Protect
End Sub
最佳答案
我个人建议您创建一个返回该工作表的函数。然后你基本上可以使用函数名称作为工作表变量。 (虽然如果你总是想要同一张纸,你可以只使用 Sheet1
代号)
Function MySheet() As Excel.Worksheet
Set MySheet = Sheet1
End Function
并使用,例如:
Sub foo()
MsgBox MySheet.Name
End Sub