・VBSからExcelを操作します
・既にファイルオープンの場合はそのオブジェクトをそのまま使用します。開き直しはしません
・既にExcelが立ち上がっている場合はそのオブジェクトを使用します。別プロセスのExcelを使用しませんので、Bookまたがりの関数などが問題なく使用できます。
' VBSによるExcelファイル処理の雛型
' 既にファイルオープンの場合はそのオブジェクトをそのまま使用することで開きなおしがない。
' また新規に開く場合でも既存Excelオブジェクトを利用することで、同一のExcelプロセスとなり
' Bookまたがりの関数などが問題なく使用できる。
'
' [xxxx] 四角カッコでくくると日本語の変数が使用できます
'
'
[フルパス] = "Y:\Qiita\zz.xlsx"
[シート名] = "aaa" '☆☆☆ カタカナの「ト」が最終文字の場合、エラーになってしまいます。なぜかわかりません。
On Error Resume Next
Set [今回APL] = Nothing '--- 今回使用するApplcationオブジェクト ---
Set [今回EXL] = Nothing '--- 今回使用するExcelオブジェクト ---
Set [既存EXL] = Nothing '--- 既に使用しているExclオブジェクト ---
Set [既存EXL] = GetObject(, "Excel.Application") '--- 既存のEXLオブジェクト ---
[既存EXL].DisplayAlerts = False '--- 警告表示抑止 ---
Set [今回EXL] = GetObject([フルパス]) '--- 対象ファイルのEXLオブジェクト ---
Set [今回APL] = [今回EXL].Parent '--- 対象ファイルのApplicationオブジェクト ---
Set [今回EXL] = Nothing '--- 新規オブジェクトでオープンの場合は今開いたExcelは閉じられる。既存オブジェクトの場合はそのまま。---
'--- 対象ExcelファイルのOPEN確認 ---
For Each book In [今回APL].Workbooks
If StrComp(book.FullName, [フルパス], 1) = 0 Then
'--- オープン済なので当該オブジェクトを使用する ---
Set [今回EXL] = book
[今回APL].Visible = True
End If
Next
'--- 対象Excelがまだオープンできていない ---
If [今回EXL] Is Nothing Then
If Not [既存EXL] Is Nothing Then
Set [今回APL] = [既存EXL] '--- 既存BOOKを流用 ---
Else
Set [今回APL] = CreateObject("Excel.Application") '--- 新規オブジェクトを使用 ---
End If
[今回APL].Visible = True '--- 可視 ---
Set [今回EXL] = [今回APL].Workbooks.Open([フルパス]) '--- Excelファイルをオープン ---
End If
[既存EXL].DisplayAlerts = True
Set [既存EXL] = Nothing
On Error Goto 0
If [今回EXL] Is Nothing Then Err.Raise 1, "", "ファイルがオープン出来ませんでした"
'-----------------
'--- Excel処理 ---
'-----------------
Set [今回SHT] = [今回EXL].Worksheets([シート名])
[今回SHT].Range("A2") = "eee"
Set [今回APL] = Nothing
Set [今回SHT] = Nothing
Set [今回EXL] = Nothing
'--- END ---