我有一个C#程序,它打开几个Microsoft Access文件,并从每个文件中执行功能.
本质上,代码看起来像这样:
Microsoft.Office.Interop.Access.Application app =
new Microsoft.Office.Interop.Access.Application();
app.Visible = true;
app.OpenCurrentDatabase(accessFileFullPath, false, "");
//Call the function
app.Eval(function);
Run Code Online (Sandbox Code Playgroud)
但是,当VBA代码中发生调试错误时,我想将其捕获到我的C#程序中.
请不要回答:"在您的VBA程序中捕获错误".由于我不会涉及的原因,这是不可能的.
我过去使用的一种方法是让一个线程间歇性地监视任何Visual Basic Debug窗口的句柄(FindWindowEx Win32函数返回非零值).我不喜欢这种方法,也不想继续使用它.
我找到了这个适用于Microsoft Excel的线程.从本质上讲,它使用的Microsoft.VisualBasic.CallByName()功能显然可以被困在try/catch块中,而无需用户交互.但是,我无法使用Microsoft Access - 主要是因为我无法弄清楚如何使用此命令调用函数/ sub.
任何建议都将真诚地感谢!
编辑:正如我在下面的一个答案中提到的,我尝试Eval()在try/catch块中包装,我的C#程序似乎忽略它,直到用户点击"Microsoft Visual Basic"错误对话框上的"结束"按钮.我不希望任何用户交互,而是想要捕获VBA错误以便在我的C#程序中处理.