我正在编写一个通用于多个工作簿的代码,但始终使用相同的参考工作簿。该代码将有许多子程序,因此我尝试避免在每个子程序中为参考工作簿定义变量,我希望将它们声明为全局变量。
最初我是这样写的:
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”中声明变量,按照此答案使用:
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
。 - Daniel Dušek