从C#调用VBA宏会导致崩溃。直接在Excel中运行时它不会

时间:2017-08-03 17:29:41

标签: c# vba office-interop

我有这个VBA宏:

Function CopySheets(ByVal path As String, ByVal newSheetName As String, ByVal version) As Boolean

    Dim WorkbookToCopyTo As Workbook: Set WorkbookToCopyTo = ActiveWorkbook
    Dim WorkbookToCopyFrom As Workbook: Set WorkbookToCopyFrom = Workbooks.Open(Filename:=path & ".xlsx", ReadOnly:=True)
    Dim WorkSheetToCopyFrom As Worksheet: Set WorkSheetToCopyFrom = WorkbookToCopyFrom.Sheets(1)

    CopySheets = False

    On Error GoTo CopyError
'    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    WorkSheetToCopyFrom.Copy After:=WorkbookToCopyTo.Worksheets(WorkbookToCopyTo.Sheets.Count)
    Worksheets(Sheets.Count).Name = newSheetName

    WorkbookToCopyFrom.Close

    If version = "Alpha" Then
        WorkbookToCopyTo.Select
        Sheets(WorkbookToCopyTo.Sheets.Count).Range("A2").Select
        Application.ScreenUpdating = True
        ActiveWindow.FreezePanes = True
        Application.ScreenUpdating = False
    End If

    Exit Function
CopyError:
    CopySheets = True

End Function

如果我有人打开文件时使用下一个代码直接从Excel文件中运行它,它就没有问题:

test = CleanMRP("MRP", "Week", "Alpha", "H:\supply chain\MRP\MRP Test\Data\MRP_Weekly-en-us", 2, "H:\supply chain\MRP\MRP Test\Data\")

但是,当我通过C#使用相同的变量调用它来运行相同的宏(并且某人打开它)时,它会崩溃。

这是我的C#代码:

if (excelApp.Run("CopySheets", worksheets[i].Path, worksheets[i].TabName, CurrentWorkbook.Version) == true)
{
      VBAError(CurrentWorkbook.DataPath, "CopySheets", CurrentWorkbook.Version, CurrentWorkbook.ReportType, worksheets[i].Path);
                            throw new Exception();
}

当我从C#调用文件打开文件时,如何防止文件崩溃?

0 个答案:

没有答案