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