解決済み

Workbookが2つあった場合に

  • 暇なときにでも
  • 質問No.5373104
  • 閲覧数9
  • ありがとう数5
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 76% (55/72)

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

ちなみにBを開いた場合は
Workbooks(2).Activate
このように記述しています。 
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1

ベストアンサー率 56% (295/524)

1つのエクセルアプリケーションで
他のBookも開くのであれば、
Workbooks.Countが1のとき1つだけ開いています。
お礼コメント
mazdaFD3

お礼率 76% (55/72)

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

回答ありがとうございます。
当方、マクロに関して初心者ではありますが
とてもシンプルで分かりやすく、当方の希望した効果がえられました^^
大変、助かりました^^
投稿日時 - 2009-10-18 21:40:33
OKWAVE 20th Be MORE ありがとうをカタチに

その他の回答 (全3件)

  • 回答No.4

ベストアンサー率 57% (3570/6233)

こんにちは。

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

>その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
お礼コメント
mazdaFD3

お礼率 76% (55/72)

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

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

当方マクロに関して初心者であるため、複雑なコードは意味までは
とても理解できませんでしたが、今後マクロを習得していく上で参考になりました^^
投稿日時 - 2009-10-18 23:26:16
  • 回答No.3

ベストアンサー率 36% (97/264)

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を参照できます。
お礼コメント
mazdaFD3

お礼率 76% (55/72)

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

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

当方の意図としては、開いていない場合は
何も起こらない状態を想定していましたが
メッセージボックスを使うというのは、とても参考になりました^^
投稿日時 - 2009-10-18 23:17:03
  • 回答No.2

ベストアンサー率 60% (315/524)

エラーの発生で判断すればどうかな
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
お礼コメント
mazdaFD3

お礼率 76% (55/72)

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

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

当方の意図としては、開いていない場合は
何も起こらない状態を想定していましたが
メッセージボックスを使うというのは、とても参考になりました^^
投稿日時 - 2009-10-18 21:59:34
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ