首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >禁用Excel调试/结束弹出或从c#项目读取excel变量

禁用Excel调试/结束弹出或从c#项目读取excel变量
EN

Stack Overflow用户
提问于 2019-03-05 03:57:29
回答 1查看 542关注 0票数 1

我有一个C#互操作方法,它打开一个excel文件,运行一个宏,保存并关闭它。

代码语言:javascript
复制
    private void DoExcelMacro(string fileName, string macroName)
    {
        Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
        Microsoft.Office.Interop.Excel.Workbook workbook;
        workbook = excel.Workbooks.Open(fileName);
        excel.DisplayAlerts = false;

        excel.Run(macroName);
        Worksheet ws = workbook.ActiveSheet;

        workbook.SaveAs(fileName);
        excel.DisplayAlerts = true;

        ws = null;
        workbook.Close();
        workbook = null;
        excel = null;

        GC.Collect();
    }

它运行良好,除非宏中出现错误,如:

代码语言:javascript
复制
    Public Sub MacroEntry()
    Dim test AS Integer
        test = "A"
    End Sub

关闭DisplayAlerts不起作用。如果我点击弹出窗口上的"End“,我会在我的C#应用程序中收到错误消息。

问题1:有没有一种方法可以抑制错误弹出,但让错误通过C#应用程序?

我可以修改Excel宏来捕获错误

代码语言:javascript
复制
    Public macroError As ErrObject

    Public Sub MacroEntry()
    On Error GoTo ErrorHandler
    Dim test As Integer
        test = "A"

    ErrorHandler:
        Set macroError = Err
        Exit Sub
    End Sub

问题2:如何从C#互操作对象中读取Excel变量macroError

如果可能的话,我更喜欢问题1的解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-05 04:49:00

如果您运行的宏通常是Sub(返回空值),则更改为一个函数(happy-path返回字符串""),但在捕获错误后,您可以在C#中检查非空字符串。

代码语言:javascript
复制
Public Function MacroEntry() As String
On Error GoTo ErrorHandler
    Dim test As Integer
    test = "A"

    Exit Function
ErrorHandler:
    MacroEntry= Err.Description
    Exit Function
End Function

C#:

代码语言:javascript
复制
string macroErrorReturn = excel.Run(macroName).ToString();
if (macroErrorReturn != "") {
    //error occurred in macro   
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54990637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档