« セルの枠線を非表示にする | トップページ | 一定時間だけ実行する »

2011年10月 9日 (日)

ブックが開いているか確認してから開く

開いているブックに変更を加えたあと
同じブックを開こうとすると次のような警告が出ます。
Vba20111008a

この警告はOpenメソッドの前に
次のコードを実行して表示させないようにできます。

Application.DisplayAlerts = False

この場合ブックに加えた変更は破棄されます。

開こうとしているブックを開いているか確認して
開いているなら新たに開かない、
開いていないなら開く、
ということをVBAでやります。

まずは現在開いているブックの名前を取得します。
これにはFor Eachステートメントを使います。

以前の記事にもあったシートの名前を取得する要領です。

MyFileにファイルへのフルパスを入れてください。
開こうとしているファイルが既に開いているのなら
flag = True になります。

flag = FalseのままFor Eachのループを終えると
ファイルは開いていないとIfステートメントで判断して
ファイルを開きます。

コードはこちら

ブックが開いているか確認してから開くコード:

Sub macro111008a()
'ブックが開いているか確認してから開く

    Dim flag As Boolean
    Dim wb As Workbook
    Dim MyFile As String
    MyFile = "ファイルのフルパス"
    flag = False
   
    For Each wb In Workbooks
        If wb.FullName = MyFile Then
            flag = True
            Debug.Print MyFile & "は既に開いています"
            Exit For
        End If
    Next wb
   
    If flag = False Then
        Debug.Print MyFile & "を開きます"
        Workbooks.Open MyFile
    End If
   
End Sub

データ型がWorkBooksとWorkBookの2つがあり、
はじめWorkBooksで変数を宣言していました。

すると、For Eachのところで

コンパイルエラー:
メソッドまたはデータメンバが見つかりません。

とダイアログが表示されエラーになりました。

類似のエラーはWorksheetとWorksheetsにも起きますので
こちらのエラーが出たらデータ型を見るといいかもしれません。

|

« セルの枠線を非表示にする | トップページ | 一定時間だけ実行する »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: ブックが開いているか確認してから開く:

« セルの枠線を非表示にする | トップページ | 一定時間だけ実行する »