我有这个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#调用文件打开文件时,如何防止文件崩溃?