複数のエクセルを別々に閉じるには


いず  2006-02-17 03:58:46  No: 94231

Private Sub cmdOpen_Click()
    Dim objExcel        As Object
    Dim objBook         As Object
    Dim objSheet        As Object
    
    Set objExcel = Nothing
    Set objBook = Nothing
    Set objSheet = Nothing

    Set objExcel = CreateObject("Excel.Application")
    Set objBook = objExcel.Workbooks.Open(App.Path & "\TEST.xls")
    Set objSheet = objBook.Worksheets("Sheet1")

    objBook.Worksheets(1).cells(1, 1).Value = "文字列〜"
    
    '++++++++++++++++++++++++++++++
    '(*)ここでエクセルを開く
    '++++++++++++++++++++++++++++++
    
    objBook.Save
    objBook.Close
    objExcel.Quit
    
    Set objBook = Nothing
    Set objExcel = Nothing
    Set objSheet = Nothing

End Sub

VBからエクセルファイル(TEST1.xls)に書き込みを行っています
↑では1行の書き込みになっていますが、
実際には2〜30分、エクセルを開きっぱなしで書き込みを続けています
(*)印のところで既存のエクセルファイルTEST2.xlsを
プログラムからではなくダブルクリックをして開きます
すると、それまで不可視にしていたTEST1.xlsファイルまで開いてしまいます

プログラム実行中でTEST1.xlsが開いている状態で
TEST2.xlsをアプリケーションごと閉じようとすると、
「〜保存しますか」のダイアログが出てしまい、困っています

TEST1.xlsとTEST2.xlsが互いに干渉しあわないようにするには
どうしたらいいでしょうか


いず  2006-02-17 04:01:22  No: 94232

すみません、ファイル名を書き間違えました
(誤)Set objBook = objExcel.Workbooks.Open(App.Path & "\TEST.xls")
(正)Set objBook = objExcel.Workbooks.Open(App.Path & "\TEST1.xls")


Say  2006-02-17 17:49:28  No: 94233

プログラムではなく、Excelの操作の問題のような気がしますが・・・。

たとえば、TEST2.xlsを開くとき、ダブルクリックで開くのではなく、
先にExcelを起動して、「開く」メニューから開くようにするとか。


いず  2006-02-17 19:21:06  No: 94234

sayさんのおっしゃる通り、エクセルを起動してからTEST2.xlsを開けば
VBから起動しているエクセルには影響は無いのですが
そういった使用時のルールを作ることはできません

ユーザーがダブルクリックで別のエクセルを開いても
VBから編集しているエクセルが直接ユーザーの目に触れない方法は
無いものかを知りたいと思っていました
説明不足でした申し訳ありません


魔界の仮面弁士  2006-02-17 19:55:44  No: 94235

ダブルクリックで起動したときに、以前の Excel インスタンスを流用せず、
新規にインスタンスを生成して欲しい場合には、エクスプローラの
フォルダオプションで、xls ファイルに対する DDE メッセージの編集が
必要となります。

[ファイルの種類の編集]画面にて、xls の既定のアクションを編集してください。

≪初期状態≫(Excel 2003の場合)

アクション:『開く(&O)』
アクションを実行するアプリケーション:『"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" /e』
DDEメッセージ:『[open("%1")]』
アプリケーション:『Excel』
DDEアプリケーションが実行していないとき:『』
トピック:『system』

≪設定変更後≫

アクション:(変更無し)
アクションを実行するアプリケーション:『"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" /e "%1"』(最後に "%1" を追加)
DDEメッセージ:『』(空にする)
アプリケーション:(変更無し)
DDEアプリケーションが実行していないとき:(変更無し)
トピック:(変更無し)

上記のように設定すれば、xls をダブルクリックするたびに、新規の
Excel インスタンスが起動し、そこで開かれるようになります。

# Excel 2007 でも通用するかどうかはわかりません。


いず  2006-02-17 20:20:54  No: 94236

使用者が何らかの設定をする必要があるということですね

プログラム側から、エクセルを開くときに、
「これは非表示で特殊なプロセスなので、
他のエクセルとは別に起動しますよ」
というようなことはできないのですね

魔界の仮面弁士さん、丁寧に説明くださってありがとうございます


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加