我目前正在开发一个整合来自多个工作簿的信息的项目。虽然应用程序的第一个版本广泛使用Select
和Activate
,但根据我在本网站上看到的信息,应尽可能避免使用这些方法。因此,我目前正在重新编写代码以尽可能消除这些代码。
我正在使用的工作簿有一个非常隐藏的参考表。为了参考这张表,我在第一个模块的开头做了一些公开声明;其中一个是
Public refsheet as Worksheet
请注意,在打开工作簿后,可能无法使用此模块。
问题1 :如果我在未使用时在此模块中定义了公共变量,是否会导致问题?如果它确实导致问题,那么应该在哪里定义这些公共变量?
在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,它是否可以在所有其他模块中使用,因为它已被定义为公共变量?
当我在使用后第一次运行代码时,第一次使用refsheet很好,然后随后使用refsheet,我收到运行时错误91;对象变量或未设置块变量。
答案 0 :(得分:1)
我的建议是:删除那个公共变量 - Workbook_Open shenanigan完全。为什么你需要这个refsheet
变量?你可能没有。公共变量总是一个坏主意;他们只是通常是个坏主意。
只需通过其Name
或其CodeName
来查看表单。例如:
Worksheets("References").Range("A1").Value = "Hello world!" ' Name is "References"
shtReferences.Range("A2").Value = "Hello world!" ' CodeName is shtReferences
第二个假定您在“属性”窗口(顶部shtReferences
)中将工作表的CodeName更改为(Name)
,如下例所示。这是我最喜欢的引用工作表的方法,因为它可以防止用户更改工作表选项卡中工作表的Name
。
注意:(Name)
代表CodeName
,这与没有括号的Name
不同!我知道,有点混乱。
请注意,默认情况下,CodeName
张为Sheet1
,Sheet2
,...令人困惑的是,Name
张是Sheet1
张默认情况下还有Sheet2
,Name
等。但CodeName
和(Name)
/ MsgBox shtReferences.Name ' returns "References"
MsgBox shtReferences.CodeName ' returns "shtReferences"
没有关联,可以单独更改。
{{1}}
答案 1 :(得分:0)
我认为还有其他事情正在发生。我把它放在工作簿代码区:
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获得预期结果。
在新工作簿中尝试此操作,看看您是否复制了我所看到的内容。