7

私は、多数のスプレッドシートを1つずつ開き、いくつかのセルを読み取ってファイルを閉じるvb.netコンソールアプリに取り組んでいます。

一部のスプレッドシートには、ファイルを開いたときに Excel が再計算する数式が含まれており、スプレッドシートを閉じるときに変更を保存するかどうかを確認するダイアログ ボックスが表示されます。

メッセージ: 「変更を myfile.xls に保存しますか? 以前のバージョンの Excel で最後に保存されたファイルを開くと、Microsoft Office Excel は数式を再計算します」

そのダイアログ ボックスを自動的に辞退するにはどうすればよいですか?

            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()

ありがとう!

4

3 に答える 3

14

Close メソッドに False パラメータを指定する必要があります

xlWorkBook.Close(False)

Excel VBA ヘルプから:

Workbook オブジェクトに適用される Close メソッド。

オブジェクトを閉じます。

expression.Close(SaveChanges, ファイル名, RouteWorkbook)

式 必須。上記のオブジェクトのいずれかを返す式。

SaveChanges オプションのバリアント。ワークブックに変更がない場合、この引数は無視されます。ワークブックに変更があり、開いている他のウィンドウにワークブックが表示される場合、この引数は無視されます。ブックに変更があり、開いている他のウィンドウにブックが表示されない場合、この引数は、次の表に示すように、変更を保存するかどうかを指定します。

値 アクション True ワークブックへの変更を保存します。ワークブックに関連付けられたファイル名がまだない場合は、FileName が使用されます。FileName を省略した場合、ユーザーはファイル名を指定するよう求められます。False 変更をこのファイルに保存しません。省略 変更を保存するかどうかをユーザーに確認するダイアログ ボックスを表示します。

FileName オプションのバリアント。このファイル名で変更を保存します。

RouteWorkbook オプションのバリアント。ワークブックを次の受信者に回覧する必要がない場合 (回覧先がないか、既に回覧済みの場合)、この引数は無視されます。それ以外の場合、Microsoft Excel は次の表に示すようにブックをルーティングします。

値 意味 True ワークブックを次の受信者に送信します。False ブックを送信しません。省略 ワークブックを送信するかどうかをユーザーに確認するダイアログ ボックスを表示します。

于 2009-04-15T20:58:22.687 に答える
3

このドキュメントごと: http://msdn.microsoft.com/en-us/library/bb223560.aspx

ブックをディスクに保存せずに、ブックの Saved プロパティを True に設定すると、Microsoft Excel は、ブックを保存するかどうかを確認せずに終了します。

于 2009-04-15T20:59:33.680 に答える
1

このエラー メッセージを回避するためにClose()を使用することをお勧めしますが、v11.0 のようなパラメーターをとらないclose()を使用するバージョンを使用しているため、この場合の問題は解決されません。この問題に対処するには、 Marshal.RealeaseCOMObjectを使用できますが、これにはいくつかの問題があることに注意してください。

「ノーと言う方法」に応じて、次を使用できます。

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

それが役に立てば幸い!

于 2012-08-02T12:05:17.403 に答える