推しミネラルウォーターはありますか?

VBScriptでエクセルを開き、
そのエクセルにテキストを書き込んでセーブしてから閉じる。
という処理を行っているのですが、

テキストを書き込んでいる間に、エクスプローラー上で別のエクセルファイルを開こうとすると、VBScriptで開いている同じエクセルアプリケーションで開いてしまい、
VBScriptのセーブしてから閉じるという処理が走ると、同様に閉じてしまいます。

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

A 回答 (2件)

こんばんは。



>VBScriptでエクセルを開き、そのエクセルにテキストを書き込んでセーブしてから閉じる。
これ自体、VBScriptのコードがきちんと書かれていれば、何の問題もないはすです。
だいたい、VBScript を使うということは、タスクで一定の時間に、自動実行しているということだと思います。コードを出してみたらどうですか?「テキストを書き込んで」の意味が良く分かりません。

オートメーション・オブジェクトで開いたブックは、エクスプローラーでダブルクリックで開いたExcelとは、別の動作をします。ただし、そのブックは、セキュリティが利きませんので、自己管理が必要です。
    • good
    • 0

『セーブしてから閉じる』時に、.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

凡そこんなイメージ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!