
お世話になっています。
マクロでワークブックを開いてシートを挿入したり
セルの値をコピーしたりしております。
その際、相手側のワークブックが閉じていると処理出来ないため
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
Worksheets メソッドは失敗しました。のエラー処理のやり方
Visual Basic(VBA)
-
5
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
6
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
7
《エクセルVBA》「他の人が該当ファイルを使用中の場合」の処理
Excel(エクセル)
-
8
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
9
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
10
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
11
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
12
【Excel VBA】書き込み先ブックが既に開かれてた場合の処理
Visual Basic(VBA)
-
13
サーバー上のブックを開けない時(エクセルVBA)
Excel(エクセル)
-
14
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
15
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
16
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
17
VBAでファイルオープン後にコードが実行されない
Visual Basic(VBA)
-
18
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
19
【Excel VBA】ネットワーク上の共有フォルダにあるExcelを開く
Excel(エクセル)
-
20
ExcelVBA ファイルクローズ時にエラーとなる
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの文字数列関数と競馬...
-
エクセルでフィルターした値を...
-
表計算ソフトでの様式の呼称
-
エクセルシートの見出しの文字...
-
エクセルに写真が貼れない(フ...
-
【マクロ】実行時エラー '424':...
-
【画像あり】【関数】指定した...
-
Office2021のエクセルで米国株...
-
【関数】3つのセルの中で最新...
-
LibreOffice Clalc(またはエク...
-
Excelで4択問題を作成したい
-
【画像あり】オートフィルター...
-
空白のはずがSUBTOTAL関数でカ...
-
エクセルのVBAで集計をしたい
-
Excelに貼ったXのURLのリンク...
-
エクセルのライセンスが分かり...
-
【マクロ】excelファイルを開く...
-
エクセルの複雑なシフト表から...
-
エクセルのリストについて
-
【関数】=EXACT(a1,b1) a1とb1...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】実行時エラー '424':...
-
エクセルのVBAで集計をしたい
-
Office2021のエクセルで米国株...
-
【画像あり】オートフィルター...
-
vba テキストボックスとリフト...
-
他のシートの検索
-
【マクロ】【相談】Excelブック...
-
【マクロ】【配列】3つのシー...
-
【マクロ】元データと同じお客...
-
【マクロ】数式を入力したい。...
-
【マクロ】左のブックと右のブ...
-
エクセルの関数について
-
エクセルのリストについて
-
【マクロ】変数に入れるコード...
-
エクセルシートの見出しの文字...
-
【マクロ】excelファイルを開く...
-
【関数】3つのセルの中で最新...
-
エクセルの複雑なシフト表から...
-
【マクロ】【画像あり】❶ブック...
-
LibreOffice Clalc(またはエク...
おすすめ情報
>校閲→ブックの共有を設定しているファイルは他の方が開いていても
エラーは出ないと思います。
↓
これのことですよね。
チェックは外しております
ママチャリさんへ
いつもご解答ありがとうございます。
エラーメッセージの画像です。
いつものようにコードをアップしてもいいですよ。
必要でしたら遠慮なくリクエストしてくださいね。