0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VBSからのExcel操作(既オブジェクト流用、開き直し無し)

Last updated at Posted at 2020-05-06

・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 ---

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?