我想在打开文件时将全局变量定义为工作表,因此我使用了以下代码:
在模块 1 中:
Public mySheet As Worksheet
在本工作簿中:
Sub Workbook_Open()
Set mySheet = Sheet1
End Sub
然后,我想使用 mySheet
在各个过程中引用此特定工作表,其中一些过程在打开新文件时引用此工作表。
它最初工作 - 当我打开文件时,变量被设置,并且涉及 mySheet.Unprotect
、mySheet.Protect
和 mySheet.Range 的宏(“A1”)
有效。但是,当我尝试再次运行它时,我收到错误Objectvariable或Withblockvariablenotset
,并且调试将我带到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
关于vba - 全局变量自动重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32457362/