【发布时间】:2015-10-10 18:10:55
【问题描述】:
我开始编写适用于多个工作簿的代码,但始终使用相同的参考工作簿。该代码将有许多子,并且由于我试图避免在每个子中将变量变暗到参考工作簿,我想将它们声明为全局。
首先我有:
Global Locations As Excel.Workbook
Set Locations = Workbooks.Open("M:\My Documents\MSC Thesis\Italy\Merged\locXws.xlsx")
这给了我:
“编译错误:外部过程无效”
经过一番谷歌搜索后,我在某处找到了以下代码:
Public Const Locations As Excel.Workbook = "Workbooks.Open("M:\My Documents\MSC Thesis\Italy\Merged\locXws.xlsx")"
这给了我:
“编译错误:预期:类型名称”
编辑:
使用:
Public Const Locations As Excel.Workbook = "Workbooks.Open('M:\My Documents\MSC Thesis\Italy\Merged\locXws.xlsx')"
(Workbooks.Open 语句中的单引号)结果与使用双引号时的错误相同。
谁知道我做错了什么?
编辑2:
我还尝试在“ThisWorkbook”中声明变量,遵循this answer 使用:
Private Sub Workbook_Open()
Dim Locations As Excel.Workbook
Dim MergeBook As Excel.Workbook
Dim TotalRowsMerged As String
Locations = Workbooks.Open("M:\My Documents\MSC Thesis\Italy\Merged\locXws.xlsx")
MergeBook = Workbooks.Open("M:\My Documents\MSC Thesis\Italy\Merged\DURUM IT yields merged.xlsm")
TotalRowsMerged = MergeBook.Worksheets("Sheet1").UsedRange.Rows.Count
End Sub
然后它返回一个
“需要对象”
在我的模块中。
编辑3:
我现在有了这个可行的方法,但缺点是必须将 SET 行复制到每个 Sub 中,必须有更好的方法来做到这一点?
Global Locations As Workbook
Global MergeBook As Workbook
Global TotalRowsMerged As String
Sub Fill_CZ_Array()
Set Locations = Application.Workbooks("locXws.xlsx")
Set MergeBook = Application.Workbooks("DURUM IT yields merged.xlsm")
TotalRowsMerged = MergeBook.Worksheets("Sheet1").UsedRange.Rows.Count
【问题讨论】:
-
你不能使用某种个人工作簿吗?然后这样的工作簿在所有其他工作簿中都可用,例如这工作
Debug.Print Workbooks("PERSONAL.XLSB").Sheets(1).Name。 -
您将使用来自
Locations的多少个不同的工作表? -
Locations 有多个正在使用的工作表。我更喜欢能够处理“无限”数量的工作表的解决方案,以便它可以在各种场景和/或问题下重复使用,也可以来自其他成员。
-
您的带有代码的工作簿是否需要可见?换句话说,您将使用工作簿中的工作表,还是仅使用工作簿中的代码。如果只有代码,则将工作簿另存为加载项。
标签: vba excel scope global-variables