我正在尝试从VBA-sub中的第三方Excel添加中调用函数。该函数将数据从数据库加载到Excel工作簿中的指定单元格。我调用的函数很大,不幸的是我不能完整地发布它,但这里是前两行:
Public Function loadFromDatabase(ByVal XLname As String, ByVal sMark As String)
Dim xlWB As Workbook
然后它在运行以下测试之前声明了一堆变量:
'
' Get the excel book and check if it is run in compatibility mode
'
Set xlWB = getXLBook(XLname)
If xlWB Is Nothing Then
loadFromDatabase = "Workbook '" + XLname + "' not found!"
Exit Function
End If
bExcel8Limits = True
If isExcel2007orLater Then
bExcel8Limits = bCheckCompMode(xlWB)
End If
我收到此消息:找不到“工作簿”!“http://imgur.com/HQFAzoC。 getXLBook函数如下所示:
'
' Routine to get a specified Workbook
'
Function getXLBook(sName As String) As Workbook
Dim xlWB As Workbook
On Error Resume Next
Set xlWB = Nothing
Set xlWB = Application.Workbooks(sName)
On Error GoTo 0
Set getXLBook = xlWB
End Function
这里的提示可能是我可以从像这样的工作表中的Private Sub
位置调用该函数...
Private Sub loadFromDB()
Dim res As Variant
res = Application.Run("loadFromDatabase", Me.Parent.Name, "")
If res <> "OK" Then
MsgBox res
End If
End Sub
...但不是来自同一工作簿中的模块
Sub loadFromDB_test()
Dim res As Variant
res = Application.Run("loadFromDatabase", XLname, sMark)
If res <> "OK" Then
MsgBox res
End If
End Sub
有什么建议吗?
编辑:为了澄清,在运行loadFromDB_test时会弹出“找不到工作簿”消息。
编辑2:一个明显的修补程序(我没想到)只是从模块中的Private Sub
调用工作表中的Sub
。
Sub load_test_new()
Application.Run "Sheet1.loadFromDB"
End Sub
从学习的角度来看,这显然不是一个好的解决方案,因为它是低效的编码。
答案 0 :(得分:0)
根据您显示的msgbox,您将空字符串传递给函数getXLBook
。 (在getXLBook
范围内,此值存储为sName
,但在调用此函数之前,错误的原因是。)
所以,代码中的某个地方之前:
Set xlWB = getXLBook(XLname)
你应该有这样的一行,语句的右边分配一个表示完整有效文件路径的字符串:
XLName = "C:\filename.xlsx"
我怀疑您的代码不包含此赋值语句,因此应该解释错误。