我有一个工作簿,声明一个旨在保存COM对象的全局变量.
Global obj As Object
Run Code Online (Sandbox Code Playgroud)
我在Workbook_Open事件中初始化它,如下所示:
Set obj = CreateObject("ComObject.ComObject");
Run Code Online (Sandbox Code Playgroud)
我可以看到它已创建,那时我可以对它进行一些COM调用.
在我的工作表上,我有一堆看起来像的单元格:
=Module.CallToComObject(....)
Run Code Online (Sandbox Code Playgroud)
在模块内部,我有一个功能
Function CallToComObject(...)
If obj Is Nothing Then
CallToComObject= 0
Else
Dim result As Double
result = obj.GetCalculatedValue(...)
CallToComObject= result
End If
End Function
Run Code Online (Sandbox Code Playgroud)
我可以看到这些工作有点,但在几张表刷新后,obj对象不再被初始化,即它被设置为Nothing.
有人可以解释一下我应该寻找什么导致这种情况吗?
我开始编写一个适用于多个工作簿的代码,但始终使用相同的参考工作簿.代码将有许多子代码,因为我试图避免将变量调暗到每个sub中的参考工作簿,我想将它们声明为Global.
首先我有:
Global Locations As Excel.Workbook
Set Locations = Workbooks.Open("M:\My Documents\MSC Thesis\Italy\Merged\locXws.xlsx")
Run Code Online (Sandbox Code Playgroud)
哪个给了我:
"编译错误:外部程序无效"
经过一些谷歌搜索后,我在某处找到了以下代码:
Public Const Locations As Excel.Workbook = "Workbooks.Open("M:\My Documents\MSC Thesis\Italy\Merged\locXws.xlsx")"
Run Code Online (Sandbox Code Playgroud)
哪个给了我:
"编译错误:预期:类型名称"
使用:
Public Const Locations As Excel.Workbook = "Workbooks.Open('M:\My Documents\MSC Thesis\Italy\Merged\locXws.xlsx')"
Run Code Online (Sandbox Code Playgroud)
(Workbooks.Open语句中的单引号)导致与使用双引号时相同的错误.
谁知道我做错了什么?
我还尝试在"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
Run Code Online (Sandbox Code Playgroud)
但后来又回来了
"所需对象"
在我的模块中.