1

WinForms アプリケーションに次の設定があるとします。

Dim ExcelApp As Microsoft.Office.Interop.Excel.Application
Dim ExcelWorkbook As Microsoft.Office.Interop.Excel.Workbook
Dim wksDataVals As Microsoft.Office.Interop.Excel.Worksheet

ExcelApp.Visible = False

基本的に、バックグラウンドで実行されているExcelの目に見えないインスタンスがあり、その中で開いているブックとExcelWorkbook、アプリが操作しているシートが呼び出されwksDataValsます。そして、ユーザーはユーザーフォームを介してこのシート (およびその他) を操作し、それらの操作に基づいていくつかの出力を確認しています。

ここで、フォームにボタンShow Excel Sheetがあり、ユーザーがクリックすると、新しいスタンドアロンのワークブックに wksDataVals のコピーを表示し、元のデータをバックグラウンドで非表示にして、さらにデータを操作できるようにします。これを隠しておきたいので、Excelの新しいインスタンスを作成してこれを行う必要があると思います。

これを行うより良い方法はありますか:

  1. ワークシートの保存
  2. Excel の新しい (表示されている) インスタンスの作成
  3. そのインスタンスでワークシートを再度開く

(ワークシートを他のExcelインスタンスで開いたままにしたいので、ワークシートが読み取り専用になるという問題が発生する可能性があります)-ワークシートを新しい名前で再度保存することでこれを克服できることはわかっていますが、これはすべてやり過ぎのようです。

これを最も簡単な方法で達成する方法についてのアイデアはありますか?? - Excel に保存されたシートを開こうとするのではなく、ワークブック/シートを内部的に保存し、新しい Excel インスタンスにフィードする方法があるのではないでしょうか??

ありがとう!

4

1 に答える 1

1

誰かがたまたま同じ質問をした場合に備えて、私自身の質問への答えとして(専門家、より良い方法があれば教えてください)、私がやったことは次のとおりです。

  1. Excel の新しいインスタンスを作成する
  2. そのインスタンスで空白の新しいワークブックを作成します
  3. 隠しシートから気になったRangeをコピー
  4. それを新しいワークブックに貼り付けました(私の場合は値とフォーマットだけが必要でした)
  5. Excel の新しいインスタンスを表示する
  6. 新しいアプリ インスタンス、ワークブック、シートなどへの参照を設定する = 何もないため、プログラムに接続されなくなりました。

素晴らしいトリックをしたようです。

于 2012-11-13T17:42:29.180 に答える