- 締切済み
VBScriptでエクセルを開き、
VBScriptでエクセルを開き、 そのエクセルにテキストを書き込んでセーブしてから閉じる。 という処理を行っているのですが、 テキストを書き込んでいる間に、エクスプローラー上で別のエクセルファイルを開こうとすると、VBScriptで開いている同じエクセルアプリケーションで開いてしまい、 VBScriptのセーブしてから閉じるという処理が走ると、同様に閉じてしまいます。 希望としては、 テキストを書き込んでいる間に、エクスプローラー上で別のエクセルファイルを開こうとすると、別エクセルアプリケーションが開き、VBScriptとは、別として動作してほしいと考えていますが、 私の至らぬ知識ですとどうしても解決できません、ご協力をお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >VBScriptでエクセルを開き、そのエクセルにテキストを書き込んでセーブしてから閉じる。 これ自体、VBScriptのコードがきちんと書かれていれば、何の問題もないはすです。 だいたい、VBScript を使うということは、タスクで一定の時間に、自動実行しているということだと思います。コードを出してみたらどうですか?「テキストを書き込んで」の意味が良く分かりません。 オートメーション・オブジェクトで開いたブックは、エクスプローラーでダブルクリックで開いたExcelとは、別の動作をします。ただし、そのブックは、セキュリティが利きませんので、自己管理が必要です。
- end-u
- ベストアンサー率79% (496/625)
『セーブしてから閉じる』時に、.Workbooks.Countが2以上だったら該当Bookだけ閉じて、 Excelは閉じないようにすれば良いような気がしますが、 表示されたExcelでユーザー操作されてしまうとエラーが出たりする状況なのでしょうか? その場合、ExcelをSDIで使うように設定を変える方法も考えられますが、 コード実行ごとにレジストリを弄くるのもちょっと...って感じですね。 なので 処理中に.Workbooks.Countをチェックして bookが開かれたらフルパスを記憶した上で閉じて、新規プロセスのExcelで開き直す。 ...みたいな方向性ではどうでしょう。 If xlApp.Workbooks.Count > 1 Then With xlApp.Workbooks With .Item(.Count) newFile = .FullName .Close False End With End With If IsEmpty(xlApp2) Then Set xlApp2 = CreateObject("excel.application") xlApp2.Visible = True End If xlApp2.Workbooks.Open newFile End If 凡そこんなイメージ。