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

在模块 1 中:

Public mySheet As Worksheet

在本工作簿中:
Sub Workbook_Open()
    Set mySheet = Sheet1
End Sub

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

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

10-06 06:27