アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になっています。

マクロでワークブックを開いてシートを挿入したり
セルの値をコピーしたりしております。

その際、相手側のワークブックが閉じていると処理出来ないため
Workbooks.Open で一旦、開いて処理しています。

その時に相手側のワークブックが既に開かれていた場合に
Workbooks.Open でエラーが出て止まってしまうマクロと、

相手側のワークブックが開いているにも関わらず
Workbooks.Open でエラーが出ずにシートを挿入するなどの処理を
問題なく実行してしまうマクロがあります。

既に相手側のワークブックが開いている場合はエラーが出ないように
対策をしてもいいのですが、開いていてもWorkbooks.Open で
エラーが出ない場合と、開いていたらエラーが出てしまう場合の
違いがわかっているとマクロを作成する時にいろいろ便利です。

もし何か区別があるのでしたら教えて下さい。

すいませんが、詳しい方、説明の上手な方、よろしくお願いします。

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

  • どう思う?

    >校閲→ブックの共有を設定しているファイルは他の方が開いていても
    エラーは出ないと思います。

    これのことですよね。
    チェックは外しております

    「【VBA】ワークブックを開く時にエラーが」の補足画像1
    No.1の回答に寄せられた補足コメントです。 補足日時:2017/03/10 15:04
  • どう思う?

    ママチャリさんへ

    いつもご解答ありがとうございます。
    エラーメッセージの画像です。

    いつものようにコードをアップしてもいいですよ。
    必要でしたら遠慮なくリクエストしてくださいね。

    「【VBA】ワークブックを開く時にエラーが」の補足画像2
    No.3の回答に寄せられた補足コメントです。 補足日時:2017/03/10 18:01

A 回答 (6件)

私の経験則なので、あまりあてにならないのですが・・・。


例えば、Aというブックを開いている状態で、再度、Aを開く場合、先に開いていたAに変更が加えらてているケースではエラーが発生します。何の変更も加えられていない場合は、エラーなしで開きます。
ちなみに、Aブック内のシートに、=NOW()関数などを設定している場合は、それだけでも変更扱いになるので、変更していないつもりでもエラーになってしまいます。
    • good
    • 1
この回答へのお礼

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

>例えば、Aというブックを開いている状態で、再度、Aを開く場合、先に開いていたAに変更が加えらてているケースではエラーが発生します。何の変更も加えられていない場合は、エラーなしで開きます。

初めて知りました。

で、、、よく似たことを確認してみると、、、。
確かにエラーの出るワークブックだけ保存の設定が違います。

他のワークブックは変更しないで閉じるときには「変更を保存しますか?」と聞いてきません。
ですが、このワークブックだけは全く変更していない場合でも「変更を保存しますか?」と聞いてきます。

ファイル、オプション、保存の設定で
「このブックの自動回復を行わない」以外、チェックを外してみたのですが、
閉じるときに「変更を保存しますか?」と聞いてきます。

具体的な原因はわかりませんが、多分、ママチャリさんのおっしゃるとおり、
何か自動で更新しているんだと思います。
※=NOW()関数などは設定していませんが。

「区別して利用する」というレベルまで至りませんが、
ママチャリさんのご解答のおかげで、
1つ疑問が解けました。

いつもご解答頂きありがとうございます。
機会がありましたらまたお願いします。

※他の方の意見も聞いてみたいので、質問はしばらく開けておきます。

お礼日時:2017/03/10 22:18

コードを見ないと何とも言えませんが、原因の90%は指定シートが無い場合。


openした後、Worksheetで指定しているシート名がopenしたブックに無い時に発生します。
    • good
    • 0
この回答へのお礼

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

コードを記載しても良いのですが、、、。
その前にアドバイスして頂いたことに対して
確認させて頂きますね。

原因の90%は指定シートが無い場合。
openした後、Worksheetで指定しているシート名がopenしたブックに無い時に発生します。

ここでいう「Worksheetで指定しているシート名」というのは
beforの時に(特定のワークシートの前に挿入する)や
after(特定のワークシートの後に挿入する)の時に使う
ワークシート名のことですよね?

このシートはちゃんと存在します。
それが証拠にワークブックが閉じている時は普通に実行できますよ。

No.5さんへのお礼にも書いたとおり、
No.3さんからのご解答と、そのお礼を読んで頂けると
詳細を理解して頂けると思います。

No.4さんからのご解答とお礼でだいたい解決しておりますが、
何かありましたら、またお願いします。今回はご解答ありがとうございます。

お礼日時:2017/03/11 08:43

> その際、相手側のワークブックが閉じていると処理出来ないため


> Workbooks.Open で一旦、開いて処理しています。
> その時に相手側のワークブックが既に開かれていた場合に
> Workbooks.Open でエラーが出て止まってしまうマクロと、

「相手側のワークブックが既に開かれていた」というのは自身のExcelによって既に開かれていた、という意味ですよね? その前提ですすめますが

私も他のブックにアクセスするマクロを書いていますが
こういった場合、相手のワークブックが開いているか(WorkBooks内に存在するか)を確認して
開いていなかったら、Workbooks.Open とするのではないでしょうか?

そうすれば仰るような問題は発生しないと思うのですが。。。
    • good
    • 0
この回答へのお礼

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

>私も他のブックにアクセスするマクロを書いていますが
こういった場合、相手のワークブックが開いているか(WorkBooks内に存在するか)を確認して
開いていなかったら、Workbooks.Open とするのではないでしょうか?

おっしゃるとおりです。
通常はご指摘の通りワークシートを開いているかの確認をしてから
ワークシートを開きにいっています。

ですが、、、後日、最初にテストとして作成したマクロ
(先にワークブックが開かれていた時のエラー対策なし)の動作を
再確認したところ、No3.ママチャリさんへのお礼に記載したとおり、

なぜか4個あるうちの3個ワークブックが開いているにも関わらず
Workbooks.Open を無視してその後の処理を実行します。

なので不思議に思い、ワークシートが開いていた場合でも
Workbooks.Open のエラーを無視してその後の処理を行えるような
条件があるのではと思い、今回こちらで質問させて頂きました。

お手数でなければ、No.3さんの質問へのお礼も読んで頂ければ
詳細がわかると思います。

こんな感じです。何かお心当たりがありましたら
再度ご解答頂けるとうれしいです。
今回はご解答ありがとうございます。機会がありましたらまたお願いします。


追記
>「相手側のワークブックが既に開かれていた」というのは自身のExcelによって既に開かれていた、という意味ですよね? その前提ですすめますが

そのとおりです。

お礼日時:2017/03/11 08:14

エラーが出るケースがあるとのことですが、その時に表示されるエラーメッセージって何ですか?

この回答への補足あり
    • good
    • 1
この回答へのお礼

ご解答ありがとうございます

エラーメッセージは以下の通りです。
※補足に画像も貼り付けておきます。

「ファイル名」は既に開いています。2重に開くと、これまでの変更内容は破棄されます。
「ファイル名」を開きますか?

いいえ

実行エラー'1004'
'Open'メソッドは失敗しました:'Workbooks'オブジェクト

詳細
マクロの機能ですが Workbooks.Open  を利用して
4つのワークブックを開いてシートをコピー(挿入)するというマクロです。

この際、3個のワークブックに関しては
ワークブックが開いていようが、閉じていようが関係ありません。
ワークシートを挿入して処理を完了します。
(ワークシートの挿入、セーブ、相手側のワークブックを閉じる)

ところが、どういうわけか1つのワークブックだけが前述の
症状で止まります。
※止まる方が正常だと思うのですが、、、。

再三触れているとおり、ワークブックが開いていた時のエラー対策を
施してもいいのですが、可能なら他の3個のワークブックのように
開いていても書き込みが出来れば便利だと思っています。

という感じです。

いつもご解答ありがとうございます。
続きがありましたら、よろしくお願いします。

お礼日時:2017/03/10 17:51

参照先が外部ワークブックの場合に起こる。



そのエクセルが立ち上がっていたらエラーにならず、立ち上がっていないならエラー。
    • good
    • 1
この回答へのお礼

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

こちらの知識不足で申し訳ないですが、
ご解答の意味がよくわかりませんでした。
順番にいきますね。

1)
>参照先が外部ワークブックの場合に起こる。

外部ワークブックというのは、
No1さんのいうネットワーク上のワークブックと
ローカルPCの中のワークブックということでしょうか?

2)
そのエクセルが立ち上がっていたらエラーにならず、立ち上がっていないならエラー。

ということですが立ち上がっていたらエラーにならないのでしょうか?

Workbooks.Open はワークブックを開くための操作なので、
立ち上がっていたらエラーで、立ち上がっていない場合は
通常はエラーが起こらないです。

今回の質問のケースはマクロによってはどっちでもいい
(立ち上がっていても、立ち上がっていなくてもエラーがでない)
というものがあり、何か区別があるのか?ということです。

実際、立ち上がっていた時のエラー対策をほどこせば
問題ないのですが、最初の質問のとおり区別があるのでしたら
マクロを作成する時に便利なので活用しようと思いました。

という感じです。今回はご解答ありがとうございます。
こんな感じですが、何かご存じでしたら、引き続き
ご解答頂けると嬉しいです。
※続きがない場合はスルーでOKです。

お礼日時:2017/03/10 16:27

>相手側のワークブック


これが自分のPCだけのファイルならこういう記述はしない
だろうという想定で(でもローカルネット上のとか示しておいて
ほしいですが)。
校閲→ブックの共有を設定しているファイルは他の方が開いていても
エラーは出ないと思います。
この回答への補足あり
    • good
    • 0
この回答へのお礼

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

順番にいきますね。

1)
>校閲→ブックの共有を設定しているファイルは他の方が開いていても
エラーは出ないと思います。

校閲、ブックの共有、編集タグ、
複数のユーザーによる同時編集と、ブックの結合を許可する

のことだと思いますが、複数ユーザーの設定のチェックは外してます。

※相手側のワークブックにもマクロが入っております。
この機能はマクロのあるワークブックでは機能しませんので。
※エクセルのバージョンはEXCEL2010です
※補足のところに画像をアップしておきます。

2)
>これが自分のPCだけのファイルならこういう記述はしない
だろうという想定で(でもローカルネット上のとか示しておいて
ほしいですが)。

おっしゃる通りワークブックは全て
ローカルネットワーク上のNASの中に入っています。

これって関係あるんでしょうか?

という感じです。

続きがあるようですので、ご面倒でなければ続きのご解答を頂ければ嬉しいです。
今回はご解答ありがとうございます。

お礼日時:2017/03/10 15:02

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

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


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