【发布时间】:2015-12-04 02:42:34
【问题描述】:
我想在打开文件时定义一个全局变量作为工作表,所以我使用了以下代码:
在模块 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
【问题讨论】:
-
将
mysheet定义为constant和sheet1,这样可以吗? -
@psychicebola VBA 不支持对象常量,它们必须在过程中初始化。
-
使用本地窗口尝试debugging您的代码,以查看变量发生了什么。它第一次运行的事实告诉我该过程有问题 - 而不是您分配变量的方式。
-
@aprados
Global关键字只允许通过引用另一个项目中的项目来访问变量 - 就这个问题而言,Public和Global将做同样的事情。 -
“其中一些引用打开了一个新文件的工作表。” - 这是否意味着您关闭了设置变量的工作簿?这将导致代码失败,因为工作表对象不再存在。
标签: vba excel global-variables