gpt4 book ai didi

vba - 对 Excel Vba 中的 DLL 函数调用进行故障排除

转载 作者:行者123 更新时间:2023-12-02 17:49:21 24 4
gpt4 key购买 nike

我正在尝试从 Excel 中的 VBA 调用 DLL 中的函数。

我的 Excel VBA 宏如下所示:

Declare PtrSafe Function TestFunction1 Lib "mylib.dll" (ByVal k As Double) As Double

Public Function TestDll(k As Double) As Double
Debug.Print ("Start")

Dim r As Double
r = TestFunction1(k)

Debug.Print ("Got result of " + r)
Debug.Print ("Done")

TestDll = r
End Function

现在,当我从 Excel 单元格中使用“=TestDll(3.0)”之类的内容调用它时,它不起作用。我在立即窗口中看到“开始”字符串,但没有其他内容。这就像在调用“TestFunction1”时发生了错误。 Excel 显示“#VALUE!”细胞内。

我还可以在调试器中设置断点,但是当我到达 TestFunction1 调用时,它就结束了。我找不到任何错误消息。

我的问题是,如何调试这个?我没有收到任何错误消息。这根本行不通。我怎样才能找出问题所在?

最佳答案

您在调试语句中使用的变量有错误,因此 UDF 失败。 休息就好。实际上,您需要将 r 转换为字符串或在调试语句中使用 & 连接。

编辑:包括错误处理程序。

Public Function TestDll(k As Double) As Double
Debug.Print ("Start")

Dim r As Double

'/ Add a error handler
On Error GoTo errHandler
'/ Assuming that your testfunction will return 10*parameter
r = k * 10


'/ The variable which you are returning,has a error and hence the UDF fails.
'/ Rest is fine. Here you will get type mismatch error.
Debug.Print ("Got result of " + r)

'/ Actually you need to convert it to string or use `&` for concatenation
Debug.Print ("Got result of " + CStr(r))

'/ or
Debug.Print ("Got result of " & r)


Debug.Print ("Done")

TestDll = r

errHandler:
If Err.Number <> 0 Then
'/ Error trapped and you get actual error desc and number.
MsgBox Err.Description, vbCritical, Err.Number
End If

End Function

关于vba - 对 Excel Vba 中的 DLL 函数调用进行故障排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39322624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com