プロが教える店舗&オフィスのセキュリティ対策術

元のブックAがあります。
もう一つ別のブックBを開いた場合に
そのBのデータをAにコピーするマクロを作ったのですが
そのBを開いてない場合に実行してしまってもエラーにならないように
したいのですが、Bが開いてないことを認識させたい場合
If~thenで記述したいのですが、どう記述すればよろしいでしょうか?

ちなみにBを開いた場合は
Workbooks(2).Activate
このように記述しています。 

A 回答 (4件)

1つのエクセルアプリケーションで


他のBookも開くのであれば、
Workbooks.Countが1のとき1つだけ開いています。
    • good
    • 0
この回答へのお礼

お礼遅れまして申し訳ございません^^;

回答ありがとうございます。
当方、マクロに関して初心者ではありますが
とてもシンプルで分かりやすく、当方の希望した効果がえられました^^
大変、助かりました^^

お礼日時:2009/10/18 21:40

こんにちは。



コードのプロセスが少し違っているようです。

>そのBを開いてない場合に実行してしまってもエラーにならないように
はよろしいのですが、次に、開いていない場合は、ブックを開くようにすればよいのです。
ただし、両方、開いていない場合は予想していません。

Workbooks(2)Activate は不要です。

'-------------------------------------------
Sub DataCopy()
  Const BK1_Name As String = "B.XLS" 'ブック名
  Dim Bk1 As Workbook
  Dim Bk2 As Workbook
  
  Set Bk2 = ThisWorkbook '自ブック
  
  On Error GoTo ErrHandler
  Set Bk1 = Workbooks(BK1_Name)
  With Bk1
    .Worksheets(1).Range("A1").Copy Bk2.Worksheets(1).Range("A1")
  End With
  Exit Sub
ErrHandler:
  If Err.Number = 9 Then
    Err.Clear
    Workbooks.Open BK1_Name
    'エラーの無限ループを防ぐ
    If Err.Number <> 0 Then Exit Sub
    Resume
  End If
End Sub
    • good
    • 0
この回答へのお礼

お礼遅れまして申し訳ございません^^;

回答ありがとうございます。

当方マクロに関して初心者であるため、複雑なコードは意味までは
とても理解できませんでしたが、今後マクロを習得していく上で参考になりました^^

お礼日時:2009/10/18 23:26

dim wb as workbook


dim umu as boolean
for each wb in workbooks
    if wb.name="B" then
        umu=true
    end if
next
if umu then
    MsgBox "開いています"
  else
    MsgBox "開いていません"
end if

For each Next ですべての開いているworkbookを参照できます。
    • good
    • 0
この回答へのお礼

お礼遅れまして申し訳ございません^^;

回答ありがとうございます。

当方の意図としては、開いていない場合は
何も起こらない状態を想定していましたが
メッセージボックスを使うというのは、とても参考になりました^^

お礼日時:2009/10/18 23:17

エラーの発生で判断すればどうかな


On Error Resume Next
Set myBook = Workbooks("Bブック.xls")
If Err Then
  MsgBox "開いていません"
Else
  MsgBox "開いています"
End If
On Error GoTo 0

>ちなみにBを開いた場合は
>Workbooks(2).Activate
上記のコードで判定後なら
myBook.Activate
    • good
    • 0
この回答へのお礼

お礼遅れまして申し訳ございません^^;

回答ありがとうございます。

当方の意図としては、開いていない場合は
何も起こらない状態を想定していましたが
メッセージボックスを使うというのは、とても参考になりました^^

お礼日時:2009/10/18 21:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!