尝试从Excel中添加函数时未找到工作簿

时间:2014-01-16 18:15:22

标签: vba excel-vba excel

我正在尝试从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

从学习的角度来看,这显然不是一个好的解决方案,因为它是低效的编码。

1 个答案:

答案 0 :(得分:0)

根据您显示的msgbox,您将空字符串传递给函数getXLBook。 (在getXLBook范围内,此值存储为sName,但在调用此函数之前,错误的原因是。)

所以,代码中的某个地方之前

Set xlWB = getXLBook(XLname)

你应该有这样的一行,语句的右边分配一个表示完整有效文件路径的字符串:

XLName = "C:\filename.xlsx"

我怀疑您的代码不包含此赋值语句,因此应该解释错误。