运行时错误91对象variables或未设置块variables – 使用公共variables

我目前正在从一个工作簿中整合信息的项目。 虽然第一个版本的应用程序广泛使用了SelectActivate ,但从我在这个网站上看到的信息来看,尽可能避免使用这些方法。 因此,我现在正在重新篡改代码,以尽可能消除这些代码。

我正在使用的工作簿有一个非常隐藏的参考表。 为了参考这个表,我在第一个模块开始时已经做了一些公开的声明。 其中之一是

 Public refsheet as Worksheet 

请注意,在打开工作簿后,可能不会使用此模块。

问题1 :这是否会导致一个问题,如果我没有使用此模块中定义的我的公共variables? 如果确实会引起问题,那么应该在哪里定义这些公共variables?

Workbook_Open()事件中,我有以下内容:

 Private Sub Workbook_Open() Set refsheet = Sheets("References") Set corang = Sheets("Consolidation").Range("L2:AI2") Application.ScreenUpdating = False refsheet.Visible = xlSheetVeryHidden Application.ScreenUpdating = True End Sub 

问题2 :如果我在Workbook_Open()子集中设置refsheet,那么它是否可用于所有其他模块,因为它已被定义为公共variables?

当我在第一次运行代码后,第一次使用refsheet是好的,然后任何时候使用refsheet,我收到一个运行时错误91; 对象variables或未设置块variables。

我的build议是:放下那个公共variables – Workbook_Open shenanigan完全。 为什么你需要这个refsheetvariables呢? 你可能不会。 公共variables并不总是一个坏主意, 他们通常是一个坏主意。

只需按照其Name或代码Name参考工作表。 例:

 Worksheets("References").Range("A1").Value = "Hello world!" ' Name is "References" shtReferences.Range("A2").Value = "Hello world!" ' CodeName is shtReferences 

第二个假定你shtReferences在属性窗口的第一行(Name)改变工作表的CodeName为shtReferences ,如下例所示。 这是我最喜欢的引用图纸的方式,因为它可以防止用户更改“工作表”选项卡中图纸的Name

注意:( (Name)代表CodeName ,这与不带括号的Name不同! 有点混乱,我知道。

在这里输入图像描述

请注意,默认情况下,工作表的CodeName默认为Sheet1Sheet2 ,…。混淆的一个原因是工作表的Name默认也是Sheet1Sheet2等。 但NameCodeName / (Name)不链接,可以独立更改。

 MsgBox shtReferences.Name ' returns "References" MsgBox shtReferences.CodeName ' returns "shtReferences" 

我想其他事情正在发生。 我把这个放在工作簿代码区:

 Private Sub Workbook_Open() Set MySheet = Sheets("xxx") MySheet.Visible = xlSheetVeryHidden End Sub 

我把它放在一个标准的模块中:

 Public MySheet As Worksheet Sub MAIN() MsgBox MySheet.Name End Sub 

重新打开文件后,通过运行MAIN得到预期的结果

试试这个新的工作簿,看看你是否复制我所看到的。