【发布时间】:2016-09-06 23:12:47
【问题描述】:
我正在使用 excel-DNA 制作插件,一个插件处理与 API 的通信,另一个处理输入和路由。第二个插件需要分开,因为其他插件使用它来发布到同一个api,它用于保存有关地址和用户的信息。
在 VBA 中,我使用 Application.Run() 来运行其他文件函数,因此我假设 ExcelDnaUtil.Application.run() 的工作方式与它相同。问题是异步功能,当他们尝试使用 application.run 当用户输入一个单元格或选择多个单元格时,他们得到一个错误 0x800AC472。
我尝试使用此线程HRESULT 800ac472 from set operations in Excel 中的想法通过循环直到函数成功(示例如下)来解决问题,但是当有人打开格式化或函数向导窗口时仍然会出现错误。
Public Shared Function AsyncTest(a As Integer, b As Integer) As Object
Return ExcelAsyncUtil.Run("AsyncTest", New Object() {a, b}, Function() SyncTest(a, b))
End Function
<MethodImpl(MethodImplOptions.Synchronized)>
Public Shared Function SyncTest(a As Integer, b As Integer) As Object
Try
Dim Package = String.Concat({"<Model><a>", a, "</a><b>", b, "</b></Model>"})
Dim xlApp As Object
xlApp = ExcelDnaUtil.Application
Dim failed as boolean = false
Do
Try
Return xlApp.Run("PostToApiXmlToJson", Package, "api/test/add")
Catch e As System.Runtime.InteropServices.COMException
If e.ErrorCode = -2146777998 Then
failed = True
System.Threading.Thread.Sleep(10)
End If
Debug.Write(String.Concat({"ErrorCode: #### ", e.ErrorCode, " #### PostToAPI"}))
End Try
count = count + 1
Loop Until failed = False Or count > 100
Catch err As Exception
Return err.Message
End Try
End Function
那么有没有从另一个 xll 调用函数的不同方式?
或者有没有办法告诉函数在函数空闲之前不要计算?
或者有没有办法告诉 Excel 这个函数没有计算完再试一次?
是否有人需要更多信息来提供帮助?
任何帮助将不胜感激
【问题讨论】:
标签: c# vb.net excel excel-dna vba