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

VBA、Excelのworkbook.open について質問です


これを記載してマクロ実行後、bookが2重に開いていますと警告が出た場合、どのように対処すればエラー回避できますでしょうか。

よろしくお願いいたします

質問者からの補足コメント

  • call文中にworkbook.openを付け加える形にしていた場合、callがあった分だけopenに対して条件文を加えないといけないのでしょうか。

    エラーメッセージはその都度出てきてしまいます

      補足日時:2024/02/26 17:23
  • データを別ブックに転記するマクロをこちらでご教示頂いたのにも関わらず、上記のエラーになってしまいました。
    申し訳ありません

      補足日時:2024/02/26 17:58
  • ありがとうございます。今日の夜遅くに組んでいただいたそのままを使ったのですが、エラーになってしまいました。
    それが、mb=workbooks.open(filename)のところでした。

    そこをコメントアウトすると、callでmbを使ったことによるエラーまで難なく進みました。

    御示しの通り、クローズが大前提だと身に染みて感じております。ありがとうございます。
    現在、
    別Bookに「別Bookにあるマクロを実行」マクロを作成しました。

    https://ideone.com/2V3qZs

    家では再現できたので、あとは職場で再現できるかどうかです。

    No.3の回答に寄せられた補足コメントです。 補足日時:2024/02/26 22:20
  • 返信ありがとうございます

    先方は、ボタン1つで今まで手作業だったシートの中身のコピペを希望しており、日付で新しく更新した別のシートにある同名のシートを今触っている従来のものの隣にコピーして、削除するということすら手間だといわれました。
    それて同一上でのシートでのコピペを試行錯誤しております

    追伸 昨日の別シートでコピペマクロを実行させるマクロは、処理落ちか
    1004 マクロを実行できません。このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。
    新たな問題が出てきました

      補足日時:2024/02/27 10:43
  • それは良い考え方だと思います。
    今までとは違う方向ですが、今までのコードを参考にしてみたいと思います

      補足日時:2024/02/27 11:38
  • しかしながら申しにくいのですが、openが二重エラーは逃れられないと推測してますがいかがでしょうか

      補足日時:2024/02/27 11:41
  • 恒久対策としては、mbの箇所については、Thisworkbookで置き換えになります。call copy_sheet時のパラメータにmbがありますがこれも削除します。
    具体的にコードを希望される場合は、その旨返信ください。

    ぜひよろしくお願い申し上げます


    ボタンを割り付けたいのは、どのブックなのでしょうか?
    ワークシート.xlsmはあくまで開発中のものでして、このブックで成功したならば本来のペーストしたいbookに登録したいと考えております

      補足日時:2024/02/27 12:06
  • ①ボタンを割り当てたいブック
    ②マクロを登録したいブック
    ③ky 前提がよくわかりませんが、
    ①ボタンを割り当てたいブック
    ②マクロを登録したいブック
    ③kyu,nyu,gai,折衝取込 を日々取り込みたいブック 
    は、同じブックではないのでしょうか。

    ①②③は全て同じbookに存在することになります。

    しかし③のみ別々のブックからの取込みになります
    ③は3つのブック、book旧、nyuとgaiはいっしょでbook入外、そして折衝取込はbook折衝取込、からの取込みになります。




    異なる場合は、①②③ごとにそのブック名を提示していただけませんでしょうか。
    又、③には、kyu,nyu,gai,折衝取込の4シート以外にも、他のシートがあるのでしょうか。

      補足日時:2024/02/27 12:16
  • ③には、kyu,nyu,gai,折衝取込の4シート以外にも、他のシートがあるのでしょうか。

    ございます。その中のうちにある4sheetです。

    ペーストに失敗してすいません

      補足日時:2024/02/27 12:20
  • ありがとうございます

    事情で返信出来ませんが試してみます

      補足日時:2024/02/27 12:29

A 回答 (11件中1~10件)

>ボタンを割り付けたいのは、どのブックなのでしょうか?


>ワークシート.xlsmはあくまで開発中のものでして、このブックで成功したならば本来のペーストしたいbookに登録したいと考えております

そうであれば、試験中は、
ワークシート.xlsmを手で開き、それに登録した、
「別ブックのすべてのセルを取得4」 又は 「別ブックのすべてのセルを取得5」
を直接実行してください。
「別Bookのプログラムを実行」から、上記のマクロを呼び出すのは、間違いのもとになります。
(実際の本番と同じ運用になりません)




>①②③は全て同じbookに存在することになります。
>しかし③のみ別々のブックからの取込みになります
>③は3つのブック、book旧、nyuとgaiはいっしょでbook入外、そして折衝取込はbook折衝取込、からの取込みになります。

了解しました。
上記についてはmFullPath1~FullPath4を適切に設定すれば問題ないです。
    • good
    • 0
この回答へのお礼

解決しました

④で希望どおりの移し替えが出来ました。
とても嬉しいです

長いことお付き合い下さりありがとうございました

本当に感謝しております

お礼日時:2024/02/27 14:30

シートまるごとコピーする方法です。


既存のシートを一旦削除してからシートをコピーします。
コピーされたシートのシート名を本来のシート名に変えます。
別ブックのすべてのセルを取得5 で登録しています。
シートの属性も含めてコピーしたいならこちらが良いかと思います。

https://ideone.com/Qlvj7M
    • good
    • 0

恒久対策版です。


FullPath1 = "D:\goo\excel\goo446\配信スケジュール.xlsm"
FullPath2 = "D:\goo\excel\goo446\未納本文.xlsm"
FullPath3 = "D:\goo\excel\goo446\未納本文.xlsm"
FullPath4 = "D:\goo\excel\goo446\未納本文.xlsm"
は、削除してください。
ワークシート.xlsmに登録してください。
別ブックのすべてのセルを取得4 にしました。

https://ideone.com/WFm2ym
    • good
    • 0

前提がよくわかりませんが、


①ボタンを割り当てたいブック
②マクロを登録したいブック
③kyu,nyu,gai,折衝取込 を日々取り込みたいブック 
は、同じブックではないのでしょうか。

異なる場合は、①②③ごとにそのブック名を提示していただけませんでしょうか。
又、③には、kyu,nyu,gai,折衝取込の4シート以外にも、他のシートがあるのでしょうか。
    • good
    • 0

>しかしながら申しにくいのですが、openが二重エラーは逃れられないと推測してますがいかがでしょうか



そんなことはないです。
マクロ(別ブックのすべてのセルを取得3)を
ワークシート.xlsmに登録したいなら、
ワークシート.xlsmをオープンしなければよいのです。
暫定対策ですが
Set mb = Workbooks.Open(filename)

Set mb = ThisWorkbook
に変えれば、動作すると思います。

恒久対策としては、mbの箇所については、Thisworkbookで置き換えになります。call copy_sheet時のパラメータにmbがありますがこれも削除します。
具体的にコードを希望される場合は、その旨返信ください。
只、気になるのは、何故、ワークシート.xlsmに登録するのかということです。
ワークシート.xlsmに登録するのが大前提なら、
最初にワークシート.xlsmを手でひらいて、ボタンにそのマクロを割り当てれば良いかと思います。
ボタンを割り付けたいのは、どのブックなのでしょうか?
先方は、ワークシート.xlsmを手で開いて、ボタンを押すのがいやなのでしょうか。
    • good
    • 1

>先方は、ボタン1つで今まで手作業だったシートの中身のコピペを希望しており、日付で新しく更新した別のシートにある同名のシートを今触っている従来のものの隣にコピーして、削除するということすら手間だといわれました。


>それて同一上でのシートでのコピペを試行錯誤しております

これは、既存のシートを削除するのを手で行うのが手間だということですね。
以下の処理を行うマクロを作れば良いと思いますが、いかがでしょうか。
①日付で新しく更新した別のシートにある同名のシートを今触っている従来のものの隣にコピー
②既存のシートを削除
③①でコピーしたシートを既存のシート名に合わせてリネーム

もしくは
①既存のシートを削除(全て削除はできないので何か他のシートを1つ残すこと)
②日付で新しく更新した別のシートにある同名のシートをコピー
③そのコピーしたシートをリネーム

のどちらかになります。
要はボタン1つで上記のことができればよいので、
sub 新規マクロ()
call ①
call ②
call ③
end sub

又は
sub 新規マクロ()
①の処理
②の処理
③の処理
end sub

のようにして、ボタンを新規マクロに割り当てれば良いです。
    • good
    • 1

No4です。

No4の
ブックXに別ブックのすべてのセルを取得3し、それを直接呼び出せば、問題は行ないはずですが、



ブックXに「別ブックのすべてのセルを取得3」を格納し、それを直接呼び出せば、問題は起こらないはずですが、

の誤りです。訂正します。
    • good
    • 1

これは、


https://oshiete.goo.ne.jp/qa/13744688.html
の続きですね。

https://ideone.com/2V3qZsの内容をみると
ワークシート.xlsmに格納されたマクロである「別ブックのすべてのセルを取得3」
を呼び出しています。
別ブックのすべてのセルを取得3は、下記URLの内容ですね。
https://ideone.com/ikKSnB

そのマクロのなかで、
filename = ThisWorkbook.path & "\" & "ワークシート.xlsm"
mb=workbooks.open(filename)
を行っています。
これは、自分自身をオープンするということになります。

そもそもの話になりますが、
別ブックのすべてのセルを取得3のマクロは、ワークシート.xlsmに格納して実行されることを
想定していません。
Sub 別Bookのプログラムを実行()を格納しているブック内に格納すべきものです。(仮にブックXとします)
ブックXに別ブックのすべてのセルを取得3し、それを直接呼び出せば、問題は行ないはずですが、
なぜ、そのようにされなかったのでしょうか。
何か事情があって、ワークシート.xlsmに格納されたということでしたら、その事情を
教えていただけると参考になります。

どうしても、ワークシート.xlsmに格納したいということであれば、
その前提で「別ブックのすべてのセルを取得3」を作り直す必要があります。
その場合は、その旨返信ください。
    • good
    • 1

>データを別ブックに転記するマクロをこちらでご教示頂いたのにも関わらず、上記のエラーになってしまいました。


申し訳ありません

そのマクロを入手したURLを提示していただけると、何か解決策が判るかもしれません。提示していただけないでしょうか。

通常は、あなたがマクロを実行するときに、どのブックがマクロによりオープンされるかは、あなたが判っていると思います。マクロ実行時には、そのブックがクローズしていることを確認後、行うべきと思いますが、いかがでしょうか。
特殊な仕様で作成したマクロでなければ、通常、マクロでブックをオープンする場合、そのブックはクローズされていることを前提としています。
この回答への補足あり
    • good
    • 0

2つの回避方法



① アラート非表示

Dim BookPath As String, wb As Workbook
Application.DisplayAlerts = False
Set wb = Workbooks.Open(BookPath)
Application.DisplayAlerts = True

② 事前チェック

Dim BookPath As String
Dim BookName As String
Dim flg As Boolean

BookPath = "C:\Users\hoge\huga.xlsx"

BookName = Mid(BookPath, InStrRev(BookPath, "\") + 1)
For Each wb In Workbooks
If wb.Name = BookName Then
flg = True
Exit For
End If
Next wb

If Not flg Then Workbooks.Open (BookPath)

参考
https://vbabeginner.net/how-to-open-workbook/
https://vba-hack.com/checkopenbook/
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A