私は Visual Basic (およびこのサイト) に非常に慣れていないため、オートメーションを使用するときに Excel を適切に終了する方法について少しアドバイスが必要です。私の問題の背景を少し説明します。私の上司が比較的複雑な計算を何百回も行うために作成した大きな Excel ブックがあります。現在、ユーザーはスプレッドシートを使用してデータを入力しているだけですが、現在、vb.net ユーザー インターフェイスに取り組んでいます。これにより、ユーザーがデータを入力できるようになり、さらに柔軟性と機能を提供して、ユーザーの生活をより簡単にし、 Microsoft Excel という恐怖から彼らを救い出してください。
.net アプリを開くと、ワークブックをバックグラウンドで開くコマンドを実行し (Excel オブジェクトの visible プロパティが false に設定されている)、ワークブックを使用できるようにします。ある時点で、これらの計算をスタンドアロン アプリに移行する予定ですが、現時点では費用対効果の高いソリューションではないため、既に開発されているスプレッドシートを使用します。Excel を閉じるときにちょっとした問題が発生しました。FormClosing イベントを使用して問題なく Excel を閉じることができます。私の問題は次のとおりです。アプリケーションを実行している場合 (目的のワークブックがバックグラウンドで開いていることを意味します)、デスクトップのショートカットを介して別のワークブックを開くと、他のワークブックが開いているときにアプリケーションを閉じようとすると、その 2 番目のワークブックを閉じようとし、Excel の [変更を保存] ダイアログ ボックスが表示されます。どうすればこれを回避できますか? 作成した Excel オブジェクトを閉じるのではなく、計算ブックに固有のプロセスを見つけてそれを閉じる必要がありますか?
FormClosing イベントのコードは次のとおりです。
Private Sub Form8_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
'close the workbook
xlWorkbook.Close(SaveChanges:=False)
'clean up
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbook)
xlWorkbook = Nothing
'close the excel application
xlApp.Quit()
'clean up
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
xlApp = Nothing
End Sub
編集: Excel がファイルを開く方法が原因で、この問題が発生していることは承知しています。[スタート] メニューに移動して Excel の新しいインスタンスを開かない限り、Excel は既に実行されているアプリケーション オブジェクトでファイルを開きます。これにより、この問題は避けられない可能性があると思われますが、ブレインストーミングだけでもフィードバックをいただければ幸いです
どんなアドバイスでも大歓迎です。ありがとう、エリック
PS、コードタグに私のコードを入れてくれた人に感謝します!! 私は自分でそれを行う方法を理解することを約束します;)