• 締切済み

VBScriptでエクセルを開き、

VBScriptでエクセルを開き、 そのエクセルにテキストを書き込んでセーブしてから閉じる。 という処理を行っているのですが、 テキストを書き込んでいる間に、エクスプローラー上で別のエクセルファイルを開こうとすると、VBScriptで開いている同じエクセルアプリケーションで開いてしまい、 VBScriptのセーブしてから閉じるという処理が走ると、同様に閉じてしまいます。 希望としては、 テキストを書き込んでいる間に、エクスプローラー上で別のエクセルファイルを開こうとすると、別エクセルアプリケーションが開き、VBScriptとは、別として動作してほしいと考えていますが、 私の至らぬ知識ですとどうしても解決できません、ご協力をお願い致します。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 >VBScriptでエクセルを開き、そのエクセルにテキストを書き込んでセーブしてから閉じる。 これ自体、VBScriptのコードがきちんと書かれていれば、何の問題もないはすです。 だいたい、VBScript を使うということは、タスクで一定の時間に、自動実行しているということだと思います。コードを出してみたらどうですか?「テキストを書き込んで」の意味が良く分かりません。 オートメーション・オブジェクトで開いたブックは、エクスプローラーでダブルクリックで開いたExcelとは、別の動作をします。ただし、そのブックは、セキュリティが利きませんので、自己管理が必要です。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

『セーブしてから閉じる』時に、.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 凡そこんなイメージ。

関連するQ&A