(Excel VBA)ファイルが開いているか判定をしてファイルが開いていても開いていなくてもオブジェクトを取得して作業できるようにする

ExcelVBA

ExcelVBA

会社でExcel VBAを使ってデータ処理を行う際に

別ファイルのデータを参照したい事が多く

前回も別ファイルを開いて作業を行いました。

(Excel VBA)閉じているブックからデータを取得する 第2弾

その際、別ファイルを開いていると

処理でエラーを吐き出すことがあったため

ファイルが開いているか判定をして

ファイルが開いていても開いていなくても

オブジェクトを取得して作業できるようにしました。

スポンサードリンク

ファイルが開いているか判定するためFor Eachステートメントを使う

ループ

ループ

For Eachステートメントを使用して

現在開いているすべてファイルのフルパスを取得して

調べたいファイルのフルパスと比較して

ファイルが開いているか開いていないかを判定します。

Sub Test()
    Dim OpenFilePath As String '調べたいデータのフォルダへのフルパス
    Dim OpenFileName As String '調べたいファイル名
    Dim OpenFile As String '調べたいデータフルパス+調べたいファイル名
    Dim BookCheck As Workbook 'ファイルチェック用
    Dim BookFlag As Boolean 'ファイル判定用
    Dim OpenBook As Workbook 'データファイル操作用

	OpenFilePath = "C:\Users\Public\Desktop" 'デスクトップへのパス
	OpenFileName = "Test.xlsx" 'ファイル名
	OpenFile = OpenFilePath & "\" & OpenFileName 'データフルパス+ファイル名

        '◆データを開いているかチェック
        For Each BookCheck In Workbooks '開いているファイルすべてのフルパスをループさせる
        If BookCheck.Name = OpenFileName Then ’判定したいファイルのフルパスと比較
            BookFlag = True '一致すれば【Ture】を返す
        End If
        Next BookCheck
        If BookFlag = False Then
            '◆ファイルが開いてなければファイルを開く
            Set OpenBook = Workbooks.Open(OpenFile)
        Else
            '◆ファイルが開いていたらファイル名で取得
            Set OpenBook = Workbooks(OpenFileName)
        End If

  '▼▼▼ここから作業を記述していく▼▼▼
  '~
End Sub

Workbookオブジェクトを使うと

現在開いているエクセルファイルすべてのファイル名とファイルパスを取得するため

比較したいファイル名とフルパスで比較します。

その際、IF分を使い判定をして

次のIF分にて、開いていない場合と

開いている場合の処理を行います。

ここではファイルをWorkbookオブジェクトにして

この後、処理させていきます。

Workbookオブジェクトは開いていない場合

Openメソッドを使うのですが、

その際はファイル名とファイルパスが必要です。

開いている場合はOpenメソッドは使わないので

ファイル名だけで問題ありません。

ここがいまいち理解に苦しみました。

Excel VBAの教科書 (Informatics & IDEA)

新品価格
¥2,570から
(2019/9/21 06:11時点)

Excel VBAの教科書 [ 古川 順平 ]

価格:2,570円
(2019/9/21 06:23時点)
感想(1件)

スポンサードリンク

コメントを残す

サブコンテンツ

このページの先頭へ