In meiner Anwendung muss ich überprüfen, ob ein Excel-Dokument vb-Makros enthält. Also habe ich die folgende Methode geschrieben, um das Excel-Dokument zu überprüfen:Mit Interop.Excel überprüfen, ob die Excel-Datei VBA-Makros enthält
internal static bool ExcelContainsMacros(string pathToExcelFile)
{
bool hasMacros = true;
Microsoft.Office.Interop.Excel._Application excelApplication = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook workbooks = null;
try
{
object isReadonly = true;
workbooks = excelApplication.Workbooks.Open(
pathToExcelFile, missing, isReadonly, missing, missing, missing,
missing, missing, missing, missing, missing, missing,
missing, missing, missing);
hasMacros = workbooks.HasVBProject;
LogHasMacros(hasMacros);
}
catch (Exception exception)
{
LogError(exception);
}
finally
{
excelApplication.Workbooks.Close();
excelApplication.Quit();
}
return hasMacros;
}
Bei einigen Excel-Dateien, die ich eine Nachricht von Excel erhalten mit einem Laufzeitfehler 91.
91: Objektvariable oder Mit Blockvariable nicht gesetzt
Ich debuggte und erkannte, dass die Nachricht bei dem Anruf an excelApplication.Workbooks.Close();
erscheint. Wenn ich diese Codezeile entferne, erscheint dieselbe Excel-Nachricht beim Aufruf von excelApplication.Quit();
.
Was muss ich tun, um die Excel-Tabelle richtig zu schließen und verhindern, zeigt diese Meldung übertreffen?
müssen Sie die Arbeitsmappe schließen, an der Sie gerade arbeiten. workbooks.Close() - auch Arbeitsmappen ist ein schrecklicher Name für Ihre Variable, da sie dem Arbeitsmappenobjekt sehr ähnlich ist. – Sorceri
Sie können nur die fehlerhafte Zeile entfernen excelApplication.Workbooks.Close(): Es sollte funktionieren. –
Wenn ich die "excelApplication.Quit();" lösche, hat dies keine Auswirkungen auf das Excel-Blatt? – Tomtom