2009-04-15 9 views
7

Ich arbeite an einer vb.net Konsole App, die eine Reihe von Tabellen nacheinander öffnet, liest ein paar Zellen und schließt die Datei.Excel-Automatisierung - wie man nur sagt Nein

Einige der Tabellenkalkulationen enthalten Formeln, die Excel neu berechnet, wenn ich die Datei öffne, und ich erhalte ein Dialogfeld, in dem ich gefragt werde, ob ich Änderungen an der Tabelle speichern möchte, wenn ich sie schließe.

Meldung: „Möchten Sie die Änderungen speichern möchten Formeln myFile.xls Microsoft Office Excel neu berechnet, wenn das Öffnen von Dateien zuletzt gespeichert von einer früheren Version von Excel?“

Wie lehne ich automatisch, dass Dialogfeld?

  Dim newCBD As New CBD 
      Dim xlApp As Excel.Application 
      Dim xlWorkBook As Excel.Workbook 
      Dim xlWorkSheet As Excel.Worksheet 

      xlApp = New Excel.ApplicationClass 
      xlWorkBook = xlApp.Workbooks.Open(myFile) 
      xlWorkSheet = xlWorkBook.Worksheets(1) 

      ...do a bunch of junk here 

      xlWorkBook.Close() 
      xlApp.Quit() 

Vielen Dank!

+0

Wenn Sie hier Informationen hinzufügen, berechnet Excel Formeln automatisch neu, wenn die Programmversion neuer als die Dateiversion ist. – pensono

Antwort

13

Sie benötigen einen falschen Parameter auf der Close-Methode

xlWorkBook.Close(False) 

Von Excel VBA-Hilfe liefern:

Close-Methode, wie sie auf das Objekt Arbeitsmappe gilt.

Schließt das Objekt.

expression.Close (Savechanges, Dateiname, RouteWorkbook)

Ausdruck Erforderlich. Ein Ausdruck , der eines der obigen Objekte zurückgibt.

SaveChanges Optionale Variante. Wenn keine Änderungen an der Arbeitsmappe vorliegen, wird dieses Argument ignoriert. Wenn Änderungen an der Arbeitsmappe und die Arbeitsmappe in anderen geöffneten Windows angezeigt wird, wird dieses Argument ignoriert. Wenn gibt es Änderungen an der Arbeitsmappe aber die Arbeitsmappe nicht in irgendwelchen anderen geöffneten Fenstern angezeigt werden, dieses Argument gibt an, ob Änderungen sollten gespeichert sein, wie in der folgenden Tabelle dargestellt .

Wert Aktion True Speichert die Änderungen in der Arbeitsmappe. Wenn mit der -Arbeitsmappe noch kein Dateiname verknüpft ist, wird Dateiname verwandt. Wenn Dateiname nicht angegeben wird, wird der Benutzer aufgefordert, einen Dateinamen anzugeben. Falsch Nicht Speichern Sie die Änderungen in dieser Datei. Ausgeschlossen Zeigt ein Dialogfeld mit der Frage an, ob der Benutzer Änderungen speichern soll oder nicht.

Dateiname Optionale Variante. Speichern ändert sich unter diesem Dateinamen.

RouteWorkbook Optionale Variante. Wenn die Arbeitsmappe nicht zu dem nächsten Empfänger weitergeleitet werden muss (wenn es keinen Routing-Beleg hat oder wenn bereits weitergeleitet wurde), wird dieses Argument ignoriert. Andernfalls leitet Microsoft Excel die Arbeitsmappe wie in der folgenden Tabelle angezeigt.

Wert Bedeutung True Sendet die Arbeitsmappe an den nächsten Empfänger. Falsch Nicht senden Sie die Arbeitsmappe. Ausgelassen Zeigt ein Dialogfeld an, in dem der Benutzer gefragt wird, ob die Arbeitsmappe gesendet werden soll.

3

Per dieser Dokumentation: http://msdn.microsoft.com/en-us/library/bb223560.aspx

Wenn Sie die Saved-Eigenschaft für eine Arbeitsmappe auf True gesetzt, ohne die Arbeitsmappe auf der Festplatte zu speichern, wird Microsoft Excel beenden, ohne dass Sie zu fragen, die Arbeitsmappe zu speichern.

1

Es ist gut Close() zu verwenden, um diese Fehlermeldung zu vermeiden, aber was ist, wenn Sie die Version wie v11.0 verwenden, die close() haben, die keine Parameter übernimmt so das Problem für diesen Fall immer noch nicht lösen. Um dieses Problem zu beheben, können Sie Marshal.RealeaseCOMObject verwenden, aber denken Sie daran, es gibt einige issues damit.

Als Antwort auf Ihre „wie einfach Nein sagen“, die Sie verwenden können:

xlApp.DisplayAlerts= false; // use just above the Close() method calls 
xlApp.Workbooks.Close(); // here no arguments can be used. 

Hoffe, es hilft!