vba - 全局变量自动重置

标签 vba excel global-variables

我想在打开文件时将全局变量定义为工作表,因此我使用了以下代码:

在模块 1 中:

Public mySheet As Worksheet

在本工作簿中:

Sub Workbook_Open()  
    Set mySheet = Sheet1   
End Sub

然后,我想使用 mySheet 在各个过程中引用此特定工作表,其中一些过程在打开新文件时引用此工作表。

它最初工作 - 当我打开文件时,变量被设置,并且涉及 mySheet.UnprotectmySheet.ProtectmySheet.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/

相关文章:

vba - 在某些函数名称中尾随 "$"有什么意义?

mysql - 在 MySQL RDBMS 中导入 CSV 文件

c# - 使用 C# 将数字签名应用于 office-vba-macros

excel - 使用多个条件搜索显示运行时错误 91

动态删除一系列 Excel 单元格中的空白

vba - 在 Solidworks 中选择 VBA 中的特定 View

php - 如何更新 Excel 数据? (刷新所有查询)

javascript - jQuery:为 map 创建全局变量

Const 多维数组

c++ - 是否允许使用作为 C++ 对象的全局变量(C 样式)?