2015年4月9日木曜日

指定した名前のブックが開いているか確かめる

既述の通り、自動/手動に関わらず、同じ名前のブックを開こうとするとエラーになって
しまう。その為、ブックを開く前に、特定の名前のブックが既に開いているかどうかを
調べる必要がある。例えば、「Book2」という名前のブックが既に存在する(=開いている)
かどうかを調べるには下記手順で処理を行う :

1.変数を1つ用意する。仮に変数をX(エックス)とする。

2.開いているブックのひとつひとつについて①~②の処理を行う :
  ①ブックの名前が「Book2」のとき、変数Xに値「あった」を代入して処理3.へ
  ②ブックの名前が「Book2」でなかったとき、変数Xに値「なかった」を代入

3.変数Xの値が「あった」の場合は「あったよ」、「なかった」の場合には「なかったよ」
  とそれぞれメッセージを表示する

処理1.と3.については特に難しいことではない。それぞれDimステートメントとMsgBoxステー
トメントを使えば実現できてしまう。問題は処理2.をどうするか。。。

処理2.のように、なにかの集まりの要素ひとつひとつについて処理を行いたい場合、VBA
では、For Each~Nextステートメントを使用する。書式は下記の通り :

For Each 要素を代入する変数 In 要素の集まり
    <<処理>>
Next

既に何度か登場した「Application.Workbooks」とは、実は、「『開いているブック』の集まり」
のことなので、For Eachステートメントを用いると処理2.は以下のように記述できる :

For Each Workbook変数 In Application.Workbooks
    If  Workbook変数.Name = "Book2" Then
        ...
    Else
        ...
    End If
Next

以上のことから、「Book2」が開いているかどうかを調べるコードは以下のようになる :

Sub SampleFindBook2
     Dim bolHit As Boolean
     Dim bk As Workbook
     bolHit = False
     For Each bk In Application.Workbooks
          If bk.Name = "Book2" Then
               bolHit = True
               Exit For
          End If
     Next 
     If bolHit Then
          MsgBox "あったよ"
     Else
          MsgBox "なかったよ"
     End If
End Sub

0 件のコメント:

コメントを投稿