
お世話になっています。
マクロでワークブックを開いてシートを挿入したり
セルの値をコピーしたりしております。
その際、相手側のワークブックが閉じていると処理出来ないため
Workbooks.Open で一旦、開いて処理しています。
その時に相手側のワークブックが既に開かれていた場合に
Workbooks.Open でエラーが出て止まってしまうマクロと、
相手側のワークブックが開いているにも関わらず
Workbooks.Open でエラーが出ずにシートを挿入するなどの処理を
問題なく実行してしまうマクロがあります。
既に相手側のワークブックが開いている場合はエラーが出ないように
対策をしてもいいのですが、開いていてもWorkbooks.Open で
エラーが出ない場合と、開いていたらエラーが出てしまう場合の
違いがわかっているとマクロを作成する時にいろいろ便利です。
もし何か区別があるのでしたら教えて下さい。
すいませんが、詳しい方、説明の上手な方、よろしくお願いします。
No.4ベストアンサー
- 回答日時:
私の経験則なので、あまりあてにならないのですが・・・。
例えば、Aというブックを開いている状態で、再度、Aを開く場合、先に開いていたAに変更が加えらてているケースではエラーが発生します。何の変更も加えられていない場合は、エラーなしで開きます。
ちなみに、Aブック内のシートに、=NOW()関数などを設定している場合は、それだけでも変更扱いになるので、変更していないつもりでもエラーになってしまいます。
ご解答ありがとうございます。
>例えば、Aというブックを開いている状態で、再度、Aを開く場合、先に開いていたAに変更が加えらてているケースではエラーが発生します。何の変更も加えられていない場合は、エラーなしで開きます。
↓
初めて知りました。
で、、、よく似たことを確認してみると、、、。
確かにエラーの出るワークブックだけ保存の設定が違います。
他のワークブックは変更しないで閉じるときには「変更を保存しますか?」と聞いてきません。
ですが、このワークブックだけは全く変更していない場合でも「変更を保存しますか?」と聞いてきます。
ファイル、オプション、保存の設定で
「このブックの自動回復を行わない」以外、チェックを外してみたのですが、
閉じるときに「変更を保存しますか?」と聞いてきます。
具体的な原因はわかりませんが、多分、ママチャリさんのおっしゃるとおり、
何か自動で更新しているんだと思います。
※=NOW()関数などは設定していませんが。
「区別して利用する」というレベルまで至りませんが、
ママチャリさんのご解答のおかげで、
1つ疑問が解けました。
いつもご解答頂きありがとうございます。
機会がありましたらまたお願いします。
※他の方の意見も聞いてみたいので、質問はしばらく開けておきます。

No.6
- 回答日時:
コードを見ないと何とも言えませんが、原因の90%は指定シートが無い場合。
openした後、Worksheetで指定しているシート名がopenしたブックに無い時に発生します。
ご解答ありがとうございます。
コードを記載しても良いのですが、、、。
その前にアドバイスして頂いたことに対して
確認させて頂きますね。
原因の90%は指定シートが無い場合。
openした後、Worksheetで指定しているシート名がopenしたブックに無い時に発生します。
↓
ここでいう「Worksheetで指定しているシート名」というのは
beforの時に(特定のワークシートの前に挿入する)や
after(特定のワークシートの後に挿入する)の時に使う
ワークシート名のことですよね?
このシートはちゃんと存在します。
それが証拠にワークブックが閉じている時は普通に実行できますよ。
No.5さんへのお礼にも書いたとおり、
No.3さんからのご解答と、そのお礼を読んで頂けると
詳細を理解して頂けると思います。
No.4さんからのご解答とお礼でだいたい解決しておりますが、
何かありましたら、またお願いします。今回はご解答ありがとうございます。
No.5
- 回答日時:
> その際、相手側のワークブックが閉じていると処理出来ないため
> Workbooks.Open で一旦、開いて処理しています。
> その時に相手側のワークブックが既に開かれていた場合に
> Workbooks.Open でエラーが出て止まってしまうマクロと、
「相手側のワークブックが既に開かれていた」というのは自身のExcelによって既に開かれていた、という意味ですよね? その前提ですすめますが
私も他のブックにアクセスするマクロを書いていますが
こういった場合、相手のワークブックが開いているか(WorkBooks内に存在するか)を確認して
開いていなかったら、Workbooks.Open とするのではないでしょうか?
そうすれば仰るような問題は発生しないと思うのですが。。。
ご解答ありがとうございます。
>私も他のブックにアクセスするマクロを書いていますが
こういった場合、相手のワークブックが開いているか(WorkBooks内に存在するか)を確認して
開いていなかったら、Workbooks.Open とするのではないでしょうか?
↓
おっしゃるとおりです。
通常はご指摘の通りワークシートを開いているかの確認をしてから
ワークシートを開きにいっています。
ですが、、、後日、最初にテストとして作成したマクロ
(先にワークブックが開かれていた時のエラー対策なし)の動作を
再確認したところ、No3.ママチャリさんへのお礼に記載したとおり、
なぜか4個あるうちの3個ワークブックが開いているにも関わらず
Workbooks.Open を無視してその後の処理を実行します。
なので不思議に思い、ワークシートが開いていた場合でも
Workbooks.Open のエラーを無視してその後の処理を行えるような
条件があるのではと思い、今回こちらで質問させて頂きました。
お手数でなければ、No.3さんの質問へのお礼も読んで頂ければ
詳細がわかると思います。
こんな感じです。何かお心当たりがありましたら
再度ご解答頂けるとうれしいです。
今回はご解答ありがとうございます。機会がありましたらまたお願いします。
追記
>「相手側のワークブックが既に開かれていた」というのは自身のExcelによって既に開かれていた、という意味ですよね? その前提ですすめますが
↓
そのとおりです。
ご解答ありがとうございます
エラーメッセージは以下の通りです。
※補足に画像も貼り付けておきます。
「ファイル名」は既に開いています。2重に開くと、これまでの変更内容は破棄されます。
「ファイル名」を開きますか?
↓
いいえ
実行エラー'1004'
'Open'メソッドは失敗しました:'Workbooks'オブジェクト
詳細
マクロの機能ですが Workbooks.Open を利用して
4つのワークブックを開いてシートをコピー(挿入)するというマクロです。
この際、3個のワークブックに関しては
ワークブックが開いていようが、閉じていようが関係ありません。
ワークシートを挿入して処理を完了します。
(ワークシートの挿入、セーブ、相手側のワークブックを閉じる)
ところが、どういうわけか1つのワークブックだけが前述の
症状で止まります。
※止まる方が正常だと思うのですが、、、。
再三触れているとおり、ワークブックが開いていた時のエラー対策を
施してもいいのですが、可能なら他の3個のワークブックのように
開いていても書き込みが出来れば便利だと思っています。
という感じです。
いつもご解答ありがとうございます。
続きがありましたら、よろしくお願いします。

No.2
- 回答日時:
参照先が外部ワークブックの場合に起こる。
そのエクセルが立ち上がっていたらエラーにならず、立ち上がっていないならエラー。
ご解答ありがとうございます。
こちらの知識不足で申し訳ないですが、
ご解答の意味がよくわかりませんでした。
順番にいきますね。
1)
>参照先が外部ワークブックの場合に起こる。
↓
外部ワークブックというのは、
No1さんのいうネットワーク上のワークブックと
ローカルPCの中のワークブックということでしょうか?
2)
そのエクセルが立ち上がっていたらエラーにならず、立ち上がっていないならエラー。
↓
ということですが立ち上がっていたらエラーにならないのでしょうか?
Workbooks.Open はワークブックを開くための操作なので、
立ち上がっていたらエラーで、立ち上がっていない場合は
通常はエラーが起こらないです。
今回の質問のケースはマクロによってはどっちでもいい
(立ち上がっていても、立ち上がっていなくてもエラーがでない)
というものがあり、何か区別があるのか?ということです。
実際、立ち上がっていた時のエラー対策をほどこせば
問題ないのですが、最初の質問のとおり区別があるのでしたら
マクロを作成する時に便利なので活用しようと思いました。
という感じです。今回はご解答ありがとうございます。
こんな感じですが、何かご存じでしたら、引き続き
ご解答頂けると嬉しいです。
※続きがない場合はスルーでOKです。
No.1
- 回答日時:
>相手側のワークブック
これが自分のPCだけのファイルならこういう記述はしない
だろうという想定で(でもローカルネット上のとか示しておいて
ほしいですが)。
校閲→ブックの共有を設定しているファイルは他の方が開いていても
エラーは出ないと思います。
ご解答ありがとうございます。
順番にいきますね。
1)
>校閲→ブックの共有を設定しているファイルは他の方が開いていても
エラーは出ないと思います。
↓
校閲、ブックの共有、編集タグ、
複数のユーザーによる同時編集と、ブックの結合を許可する
のことだと思いますが、複数ユーザーの設定のチェックは外してます。
※相手側のワークブックにもマクロが入っております。
この機能はマクロのあるワークブックでは機能しませんので。
※エクセルのバージョンはEXCEL2010です
※補足のところに画像をアップしておきます。
2)
>これが自分のPCだけのファイルならこういう記述はしない
だろうという想定で(でもローカルネット上のとか示しておいて
ほしいですが)。
↓
おっしゃる通りワークブックは全て
ローカルネットワーク上のNASの中に入っています。
これって関係あるんでしょうか?
という感じです。
続きがあるようですので、ご面倒でなければ続きのご解答を頂ければ嬉しいです。
今回はご解答ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 12:30
- Visual Basic(VBA) DisplayAlertsブロパティで ”実行時エラー424オブジェクトが必要です” 5 2022/05/15 18:02
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- Visual Basic(VBA) Excelのマクロ ブック間である範囲をコピー Workbooks(“a.xlsx“).Sheets 3 2022/05/12 17:02
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Visual Basic(VBA) Excelのマクロについて教えてください。 1 2023/03/12 12:16
- その他(プログラミング・Web制作) Pythonを勉強しています。 5 2023/08/25 09:51
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/25 16:07
- Visual Basic(VBA) vbaエクセルマクロについて あるデータを作成し、デスクトップに.xlsx形式で保存するマクロを作成 6 2023/03/03 18:05
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
-
4
《エクセルVBA》「他の人が該当ファイルを使用中の場合」の処理
Excel(エクセル)
-
5
Worksheets メソッドは失敗しました。のエラー処理のやり方
Visual Basic(VBA)
-
6
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
7
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
8
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
9
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
10
【Excel VBA】指定行以降をクリアするには?
Visual Basic(VBA)
-
11
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
12
VBA、Excelのworkbook.open について質問です これを記載してマクロ実行後、boo
Excel(エクセル)
-
13
ADOのOPENで実行時エラー
Visual Basic(VBA)
-
14
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
15
UserForm1.Showでエラーになります。
工学
-
16
VBAでファイルオープン後にコードが実行されない
Visual Basic(VBA)
-
17
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
18
【Excel VBA】ネットワーク上の共有フォルダにあるExcelを開く
Excel(エクセル)
-
19
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
20
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
【VBA】ワークブックを開く時に...
-
VBAでfunctionを利用しようとし...
-
String""から型'Double'への変...
-
【VBAエラー】Nextに対するFor...
-
実行時エラー 438 の解決策をお...
-
VBA データ(特定値)のある最...
-
マクロで"#N/A"のエラー行を削...
-
【Access】Excelインポート時に...
-
インポート時のエラー「データ...
-
VBA GoTo Error 処理が上手くい...
-
ACCESSで値を代入できないとは?
-
ASPでこんなエラーが出たんです...
-
オブジェクト型の変数にフォー...
-
HTMLソースが表示のページのも...
-
文字列内で括弧を使うには
-
Excel vbaについての質問
-
レコード登録時に「演算子があ...
-
VBS Script のエラーについてお...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロOn Error GoTo ErrLabel...
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
String""から型'Double'への変...
-
文字列内で括弧を使うには
-
マクロで"#N/A"のエラー行を削...
-
Excel vbaについての質問
-
VBA データ(特定値)のある最...
-
On ErrorでエラーNoが0
-
インポート時のエラー「データ...
-
【VBAエラー】Nextに対するFor...
-
ACCESSで値を代入できないとは?
-
【Access】Excelインポート時に...
-
VBでSQL文のUPDATE構文を使った...
-
【VB.NET】 パワポ操作を非表示で
-
「実行時エラー '3167' レコー...
-
実行時エラー 438 の解決策をお...
-
実行時エラー'-2147467259(8000...
おすすめ情報
>校閲→ブックの共有を設定しているファイルは他の方が開いていても
エラーは出ないと思います。
↓
これのことですよね。
チェックは外しております
ママチャリさんへ
いつもご解答ありがとうございます。
エラーメッセージの画像です。
いつものようにコードをアップしてもいいですよ。
必要でしたら遠慮なくリクエストしてくださいね。