EXCEL VBAにて質問です。


スクリプトで、外部ブックの特定のセルを参照させる計算式を記述したのですが、その外部ブックが未存在のために、その部分で【値の更新】ダイアログが出現してしまい、スクリプトのRunが停止してしまいます。

参照するべき外部ブックは、このスクリプトを走らせた後に、新規作成する手順となっているために、このような状況となってしまうのですが、外部ブックが存在しない段階で、当然参照エラーとなりながらも、上記のような一時停止せずに計算式をセルに書き込みたいのです。

何か方策などがありましたらば、お教えください。

回答の条件
  • 1人5回まで
  • 登録:2006/06/15 08:05:35
  • 終了:2006/06/15 10:06:31

ベストアンサー

id:llusall No.5

llusall回答回数505ベストアンサー獲得回数612006/06/15 09:55:44

ポイント50pt

再回答ですみません。

そのような場合には、DisplayAlertsを使います。


Application.DisplayAlerts = False


数式のセット処理

Application.DisplayAlerts = True


※必ず戻しましょう!

id:kitatom

ご回答ありがとうございました。おかげさまで無事に目的が達成できました。こんな方法があるのですね。たいへん勉強になりました。すばらしい知識に感謝です。

2006/06/15 10:05:43

その他の回答(4件)

id:mitou73 No.1

mitou73回答回数67ベストアンサー獲得回数52006/06/15 08:33:06

ポイント20pt

EXCEL VBAとありますが、「スクリプトで」とはVBScriptでEXCELを操作させるのでしょうか?

VBAを使ったほうが簡単なので、VBAの場合として答えます。

計算式をセルに書き込む前に、再計算を止めます

'再計算を手動にする

Application.Calculation = xlCalculationManual

で、外部ブックが開かれた後に、

'再計算を実行する

Application.Calculate

これでどうでしょう?

id:kitatom

わかりにくい文章で申し訳ございません。VBAでの実現を考えています。ご回答の中に、「外部ブックが開かれた後に、」と記述があるのですが、要はこの外部ブックがまだ存在していないのです。おっしゃる方法も試してみましたが、【値の更新】ダイアログは、あいかわらず出現してしまいます。

2006/06/15 09:00:01
id:taknt No.2

きゃづみぃ回答回数13539ベストアンサー獲得回数11982006/06/15 09:07:46

ポイント20pt

処理の流れが おかしいですね。

もちろん、何をやりたいのか把握しきれていないのでいちがいには いえませんが、ないものを参照させるというのは おかしいです。

外部ブックの作成を先には できないのでしょうか?

それができないのならば、とりあえず

外部ブックの特定のセルを参照させる計算式を記述したのですが、

この時点で、外部ブックを 自分のブックにしといて、

外部ブック作成後、外部ブックに 置換するというのは いかがでしょうか?

id:kitatom

ご回答ありがとうございます。参照先の外部ブックを先に作るという解決方法もたしかにありますが、ちょっとしたTIPSで解決できるのではないかと思い、こちらで伺いました。なかなかむずかしいものですね、回答文中の後半部分のリコメンドを検討いたします。

2006/06/15 09:41:48
id:llusall No.3

llusall回答回数505ベストアンサー獲得回数612006/06/15 09:21:28

ポイント50pt

以下の手順で処理を進めたら良いと思います。


1.あらかじめ、[ツール]-[オプション]-[計算方法]タブ-[計算方法]を手動にしてブックを保存しておく。

2.スクリプトを走らせる。

3.参照するべき外部ブックを作成する。

4.Calculateメソッドで計算させる。

  すべてのブック Application.Calculate または Calculate

  特定のワークシート Worksheets(1).Calculate

  指定されたセル範囲 Worksheets(1).Rows(2).Calculate

  または、[ツール]-[オプション]-[計算方法]タブ-[計算方法]で[再計算実行]ボタンや、[シート再計算]ボタンを押す。

id:kitatom

ご回答ありがとうございます。「2.スクリプトを走らせる。」の途中、外部参照部分でやはり「値の更新」ダイアログが出てしまいます。

2006/06/15 09:42:46
id:tmang No.4

tmang回答回数19ベストアンサー獲得回数02006/06/15 09:35:25

ポイント20pt

そういう場合はプログラミング的にエラーハンドラを使います

エクセルのVBAではOn Errorといいます。

Microsoft Visual Basic のヘルプ On Errorステートメントに詳しく出ています

解説

On Error ステートメントを使用していない場合に実行時エラーが発生すると、

そのエラーは致命的エラーになり、エラー メッセージが表示されてプログラムの実行が停止します。

********* 中略 *********

On Error Resume Next 実行時エラーが発生してもプログラムを中断せず、

エラーが発生したステートメントの次のステートメントから実行を継続します。

オブジェクトを操作する場合は、On Error GoTo ステートメントではなく、このステートメントを使ってください。

id:kitatom

ご回答ありがとうございます。言い忘れておりましたが、私もこのステートメントで解決できると思い、質問以前に試しておりますが、この方法では解決できませんでした。素人考えで恐縮なのですが、おそらく計算式を入力した段階では完全なエラーではなく、Excelがエラーを回避するための手段として、親切にも【値の更新】ダイアログが表示してくるのだと思います。実際にエラーとなるのは、この【値の更新】をキャンセルしたり、再び参照先がないブックを指定したりして、参照先の実態がないことが「確定」した後になるわけですので、その際にはエラーハンドラ的なステートメントの効用が出てくるのだと思います。

2006/06/15 09:56:43
id:llusall No.5

llusall回答回数505ベストアンサー獲得回数612006/06/15 09:55:44ここでベストアンサー

ポイント50pt

再回答ですみません。

そのような場合には、DisplayAlertsを使います。


Application.DisplayAlerts = False


数式のセット処理

Application.DisplayAlerts = True


※必ず戻しましょう!

id:kitatom

ご回答ありがとうございました。おかげさまで無事に目的が達成できました。こんな方法があるのですね。たいへん勉強になりました。すばらしい知識に感謝です。

2006/06/15 10:05:43
  • id:llusall
    いるか君ありがとうございます♪
    励みになります。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません