[[20071007202040]] 『別ブックを開くマクロ』(ゴンタ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『別ブックを開くマクロ』(ゴンタ)

 同じフォルダに"A"というブックと"B"というブックがあり 
 "A"に("B"を開く)マクロを書いています

 Workbooks.Open ThisWorkbook.Path & "\B.xls"

  ところが、このマクロを実行するまえに"B"が開かれていた場合 当然のことながら

 "B.xlsは既に開いています。2重に開くと、これまでの変更内容は破棄されます。B.xlsを開きますか?"

  のメッセージが出てきます
 そこで教えていただきたいのは、"B"が閉じていれば開く、開いていれば何もしない
 と言う内容のマクロにしたいのです。
 宜しくお願いします。
 Excel2003,WindowsXPです

 


 サンプルコードです。

 Dim wb As Workbook
 Dim flg As Boolean
  fls = False
  For Each wb In Workbooks
   If wb.Name = "B.xls" Then
      MsgBox "B.xlsは既に起動しています。"
      flg = True
   End If
  Next
  If flg = False Then
     MsgBox "B.xlsは開いていませんでした。"
  End If
 (MARBIN)

 書いていただいたコードでブックが開いているのかどうかの状態が取得できるのですね。
 MARBINさん ありがとうございます 
参考にさせていただき下記のようにして目的のものができました

 Sub Bが閉じていたら開く()
 Dim wb As Workbook
 Dim flg As Boolean
    flg = False
    For Each wb In Workbooks
        If wb.Name = "B.xls" Then
           flg = True
      Exit Sub
        End If
    Next
  If flg = False Then
           Workbooks.Open ThisWorkbook.Path & "\B.xls"
  End If
End Sub

 いろいろと応用ができそうなのですが、
    flg = False
    For Each wb In Workbooks
        If wb.Name = "B.xls" Then
           flg = True
 この部分がなかなか理解できない状態です
 よろしかったら解説いただけませんでしょうか  (ゴンタ)

 コードの意味はこんな感じです。

    flg = False '判定用フラグを下げておく	
    For Each wb In Workbooks 'ワークブックオブジェクトをループ
        If wb.Name = "B.xls" Then 'ワークブックオブジェクトの名前が"B.xls"だったら
           flg = True '判定用フラグを立てる
 (MARBIN)

 こんな方法も...

 Sub test()
   If Not IsFileOpen("B.xls") Then Workbooks.Open(ThisWorkBook.Path & "\B.xls")
 End Sub

 Function IsFileOpen(myFileName As String) As Boolean
   On Error Resume Next
   IsFileOpen = Workbooks(myFilename).Name = myFileName
 End Function

 なんとか理解できそうです。
 有難う御座いました。
 これからいろんな事に活用させていただきます。(ゴンタ)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.