运行时错误91对象variables或未设置块variables – 使用公共variables
我目前正在从一个工作簿中整合信息的项目。 虽然第一个版本的应用程序广泛使用了Select
和Activate
,但从我在这个网站上看到的信息来看,尽可能避免使用这些方法。 因此,我现在正在重新篡改代码,以尽可能消除这些代码。
我正在使用的工作簿有一个非常隐藏的参考表。 为了参考这个表,我在第一个模块开始时已经做了一些公开的声明。 其中之一是
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完全。 为什么你需要这个refsheet
variables呢? 你可能不会。 公共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
默认为Sheet1
, Sheet2
,…。混淆的一个原因是工作表的Name
默认也是Sheet1
, Sheet2
等。 但Name
和CodeName
/ (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得到预期的结果。
试试这个新的工作簿,看看你是否复制我所看到的。