Excel 运行时错误91对象变量或未设置块变量-使用公共变量

Excel 运行时错误91对象变量或未设置块变量-使用公共变量,excel,vba,Excel,Vba,我目前正在从事一个项目,该项目整合了许多工作簿中的信息。虽然应用程序的第一个版本广泛使用了Select和Activate,但从我在本网站上看到的信息来看,应尽可能避免使用这些方法。因此,我目前正在重新修改代码,以尽可能消除这些问题 我正在使用的工作簿有一个非常隐蔽的参考表。为了参考这张表,我在第一个模块开始时做了一些公开声明;其中之一就是 Public refsheet as Worksheet 请注意,打开工作簿后可能无法使用此模块 问题1:如果我在未使用时在此模块中定义了公共变量,是否会导

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

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

Public refsheet as Worksheet
请注意,打开工作簿后可能无法使用此模块

问题1:如果我在未使用时在此模块中定义了公共变量,是否会导致问题?如果确实引起了问题,这些公共变量应该在哪里定义

工作簿\u 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:如果我在工作簿_Open()子模块中设置了refsheet,那么如果它被定义为公共变量,它是否可以在所有其他模块中使用


当我在使用后第一次运行代码时,第一次使用refsheet是可以的,然后在使用refsheet之后的任何时候,我都会收到运行时错误91;对象变量或With block变量未设置。

我认为发生了其他情况。我将其放在工作簿代码区域:

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获得预期结果


在一个新的工作簿中试试这个,看看你是否复制了我看到的东西。

我的建议是:删除那个公共变量-工作簿\u完全打开shenanigan。为什么需要这个
refsheet
变量?你可能不知道。公共变量并不总是一个坏主意;它们通常是个坏主意

只需通过其
名称
,或其
代码名
来查看该表。例如:

Worksheets("References").Range("A1").Value = "Hello world!" ' Name is "References"
shtReferences.Range("A2").Value = "Hello world!" ' CodeName is shtReferences
第二个假设您在属性窗口顶行
(名称)
中将工作表的代码名更改为
shtReferences
,如下例所示。这是我最喜欢的引用工作表的方式,因为它可以防止用户在“工作表”选项卡中更改工作表的名称

注意:
(Name)
表示
CodeName
,这与没有括号的
Name
不同!我知道有点困惑

请注意,图纸的
代码名
默认为
Sheet1
Sheet2
。。。更令人困惑的是,图纸的
名称
在默认情况下也是
图纸1
图纸2
,等等。但是
Name
CodeName
/
(Name)
没有链接,可以单独更改

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

让·弗朗索瓦,非常感谢你!!!作为这方面的新手,引用对象仍然是一个谜,试图找到一个清晰的解释并不总是直截了当的。再次感谢。谢谢你这么快回复我。我不确定让·弗朗索瓦的方法是否在实现一个梦想。