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が互いに干渉しあわないようにするには
どうしたらいいでしょうか
すみません、ファイル名を書き間違えました
(誤)Set objBook = objExcel.Workbooks.Open(App.Path & "\TEST.xls")
(正)Set objBook = objExcel.Workbooks.Open(App.Path & "\TEST1.xls")
プログラムではなく、Excelの操作の問題のような気がしますが・・・。
たとえば、TEST2.xlsを開くとき、ダブルクリックで開くのではなく、
先にExcelを起動して、「開く」メニューから開くようにするとか。
sayさんのおっしゃる通り、エクセルを起動してからTEST2.xlsを開けば
VBから起動しているエクセルには影響は無いのですが
そういった使用時のルールを作ることはできません
ユーザーがダブルクリックで別のエクセルを開いても
VBから編集しているエクセルが直接ユーザーの目に触れない方法は
無いものかを知りたいと思っていました
説明不足でした申し訳ありません
ダブルクリックで起動したときに、以前の 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 でも通用するかどうかはわかりません。
使用者が何らかの設定をする必要があるということですね
プログラム側から、エクセルを開くときに、
「これは非表示で特殊なプロセスなので、
他のエクセルとは別に起動しますよ」
というようなことはできないのですね
魔界の仮面弁士さん、丁寧に説明くださってありがとうございます
ツイート | ![]() |