• ベストアンサー

エクセル:マクロ メッセージボックスを消す

エクセル作業中に発生するエラーメッセージ等、出てくるメッセージボックスをすべて包括的にキャンセル(C)あるいは中止(A)するマクロを記述することは可能でしょうか?宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

追加です。 こちらでは、Solver のマクロの数が増えたせいなのか、DummyMacro の挙動がヘンです。確か、設定によっては、意味のないマクロは、削除とかされてしまった気がします。 Sub DummyMacro() Dim v as Variant  v = Range("A1").Value End Sub こんなものにして、実質的な中身を入れてください。

gucchi-you
質問者

お礼

ありがとうございます。 しかし残念ながらご教示いただいたことを試してみましたが、状況は変わりませんでした。Wendy02さんの2003で動くものが私の2003でダメということは、やはり設定の問題かと思いますが私の能力では分析できません。 いろいろと親身にお教えいただき誠に感謝しております。解決はしませんでしたが、この質問に関して教えていただいた記述は大変勉強になりました。今後の参考になると思います。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。Wendy02です。 こちらでは再現できませんが、確かに、そのようなメッセージが出た覚えがあります。しばらくやっていれば、見つけられるとは思いますか゛まだ、分かりません。 気になる点があります。 マクロと手動で違う点というのは、Reset が入らないことです。 Sheets("optimizer").Select の後に、 SolverReset が入っていないことですね。必ずしも、SolverReset が必要だとは思いませんが、しかし、一番大きな違いとすれば、そこになってしまいます。ですから、以下のようなコードにしなくてはなりません。 若干違う部分は、以下です。選択がありません。 D19:M19>-0.40 D19:M19<0.40 もうひとつは、MaxTime:=300, Iterations:=300 というのは、論理的にはおかしいです。 昔、一度、同じ機能の Iteration(回数) とマクロのスピードを計測したことがありますが、300秒=5分ですから、Iteration が300ということはありませんので、以下のように、3万にしてみました。マクロですと、100万とかありますが、ソルバーでは、少し多いような気がします。 Sub TestMacro2()   Sheets("optimizer").Select    SolverReset   SolverOk SetCell:="$N$19", MaxMinVal:=1, ValueOf:="0", ByChange:="$D$19:$M$19"   ' MaxMinVal:=3 かもしれない   SolverOptions MaxTime:=300, Iterations:=30000, StepThru:=False      SolverAdd CellRef:="$D$19:$M$19", Relation:=3, FormulaText:="-0.4"   SolverAdd CellRef:="$D$19:$M$19", Relation:=1, FormulaText:="0.4"   SolverAdd CellRef:="SUMIF($D$19:$M$19,"""">0"""")", Relation:=2, FormulaText:="1"   SolverAdd CellRef:="SUMIF($D$19:$M$19,""""<0"""")", Relation:=2, FormulaText:="-1"   SolverAdd CellRef:="$N$19", Relation:=2, FormulaText:="MIN($N$21:$N$23)"   SolverAdd CellRef:="$N$21", Relation:=2, FormulaText:="SUMPRODUCT($D$19:$M$19,$D$6:$M$6)"   SolverAdd CellRef:="$N$22", Relation:=2, FormulaText:="SUMPRODUCT($D$19:$M$19,$D$7:$M$7)"   SolverAdd CellRef:="$N$23", Relation:=2, FormulaText:="SUMPRODUCT($D$19:$M$19,$D$8:$M$8)"      SolverSolve Userfinish:=True, ShowRef:="DummyMacro"   SolverFinish 1 End Sub Sub DummyMacro() End Sub

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。Wendy02です。 >それともやはりおっしゃるような致命的なものでしょうか? きちんとソルバー自身は手動で動くのですね? それを確かめていただいていますか?時々、それがそうでなかったりします。 >キャンセルせずに当該ファイルを選択すると「"ファイル名.xls"に"DummyMacro"は見つかりません。 一応、そのマクロは、標準モジュールに入れてあると思いますが、ある設定で、このような反応があったような記憶がありますが、どこの設定でそうなったか覚えていません。 ここのカテゴリのどこかで書いたのですが、現行のソルバーは、数学的に近似値を求めるものは、公差を大きくして、最後は人間の手で行うしかありませんし、数学的に不可能なものは、いくらソルバーでも不可能なのはご存知だと思います。 今回、試しているものは、前回と同じです。 マクロの内容は変わりましたか?もし、違うようでしたら、マクロコードと、サンプルデータと求める条件を出していただけませんか? それで、もう一度、新たに考えてみます。

gucchi-you
質問者

お礼

説明が簡略化すぎましたので、思い直してもう少し詳しく書きますと、実際のデータの数は100個です(D6:M15、N21~N30)。N19: =MIN(N21:N30) データは乱数に近いものですが(データですので乱数ではありません)、概ね+0.1から-0.1の間で0を山としてほぼ正規分布する性格の数字です。

gucchi-you
質問者

補足

度々のご回答ありがとうございます。 >きちんとソルバー自身は手動で動くのですね? はい、動きます。 >現行のソルバーは、数学的に近似値を求めるものは、公差を大きくして、最後は人間の手で行うしかありませんうしかありませんし、数学的に不可能なものは、いくらソルバーでも不可能なのはご存知だと思います。 はい、存じております。膨大なバックテスティングを行っているのですが、それをある程度補完するために初期値を何回か入替えて計算し、出た結果を比較しています。それでも最適解とはならないケースがあることも承知した上でソルバーを使用しています。 >マクロの内容は変わりましたか?もし、違うようでしたら、マクロコードと、サンプルデータと求める条件を出していただけませんか? ありがとうございます。余り変わっていませんが、簡略化して示します。 D6:M8にデータ数値(計30個)が入っています。正も負もあります。 求める結果はD19:M19です。N19の最小値を最大化するものです。 ソルバー部分だけ下に抜き出しますが、実際にはD6:M8の値を変えて何回も繰り返し計算します。また精度を上げるためにソルバーも繰り返しますし、初期値も入替えて数回計算しています。 制約条件 D19:M19>-0.40 D19:M19<0.40 SUMIF(D19:M19,">0")= 1 SUMIF(D19:M19,"<0")= -1 N19 =MIN(N21:N23) N21 =SUMPRODUCT(D19:M19,D6:M6) N22 =SUMPRODUCT(D19:M19,D7:M7) N23 =SUMPRODUCT(D19:M19,D8:M8) Sub Macrooptim() Sheets("optimizer").Select SolverOk SetCell:="$N$19", MaxMinVal:=1, ValueOf:="0", ByChange:="$D$19:$M$19" SolverOptions MaxTime:=300, Iterations:=300, StepThru:=False SolverSolve Userfinish:=True, ShowRef:="DummyMacro" End Sub Sub DummyMacro() End Sub

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >今まではエクセル2000でShowRef:="DummyMacro"という記述を以前この欄で教えていただき使用していたのですが それは、私の書いた http://oshiete1.goo.ne.jp/qa2388268.html エクセルマクロ:ソルバーの反復計算を中止する ですね。そのときのマクロは、Excel2003で、今も試してみましたが、特に変わりないですね。もともと、このマクロは、Ver.4 のマクロですから、もしも、Excel2003で不都合があれば、致命的なものです。 ただ、今回、動かないのは、参照設定されていないからではないでしょうか?Visual Basic Editor のツール-参照設定の SOLVER のチェックを入れてください。

gucchi-you
質問者

お礼

Wendy02さん、その節は大変ありがとうございました。その他にも何回かご回答いただいており仕事の効率化に大変役立っています、重ねて御礼申し上げます。 ところで今回の件ですが、参照設定はなされております。2003で"DummyMacro"を記述した場合は、最大回数に達すると「値の更新」というファイル選択のポップアップがなされ、キャンセルを押すと次にマクロエラーとなります(ここでいちいちマニュアルで中止を選択しています)。キャンセルせずに当該ファイルを選択すると「"ファイル名.xls"に"DummyMacro"は見つかりません。2つの理由が考えられます。・指定された名前は定義されていません。・指定した名前はセル参照以外で定義されています。名前を確認し、もう一度実行してみてください。」というメッセージが出て、その後マクロエラーとなります。 何か解決方法はあるでしょうか?それともやはりおっしゃるような致命的なものでしょうか?宜しくお願いいたします。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

全てかどうかはわかりませんが、マクロの中で Application.DisplayAlerts = False とするとエラーや警告のダイアログの表示を抑止できます。 元に戻すときは Application.DisplayAlerts = True です。

gucchi-you
質問者

お礼

ご回答ありがとうございました。残念ながら私が本当に消したいメッセージは頂いた記述では消せませんでした。消したかったのはソルバー計算の時、指定反復回数に達した際に出るメッセージ「試行状況の表示:最大の反復回数に達しました。このまま続けますか?」で、表示されないか、あるいは自動的に「中止」を選択する方法を探しています。今まではエクセル2000でShowRef:="DummyMacro"という記述を以前この欄で教えていただき使用していたのですが、エクセル2003にバージョンアップした途端に働かなくなってしまいました。何か別の対処方法があれば宜しくお願いいたします。

関連するQ&A

  • テキストボックスにマクロでメッセージ 424

    EXCELにてコントロールツールボックスで貼り付けたテキストボックスにマクロで処理経過やエラーメッセージをログ風に出力したいのですが、424 オブジェクトが必要です、というエラーになってしまいます。 テキストボックスのオブジェクト名はTextBox1です。 マクロ内容はメッセージを出力する部分をサブルーチン化し、呼び出す仕様で作成しました。 Public Sub OUTMessage(InMsg As String) Dim OutMsg As String OutMsg = Format(Now, "HH:MM:SS") + " : " + InMsg + Chr(13) + Chr(10) TextBox1.Text = TextBox1.Text + OutMsg  ・・・(1) TextBox1.Activate End Sub 上記の・・・(1)の部分でエラーとなります。 何度も確認しましたが、オブジェクト名は記述間違いないです。 どなたか同じ様な内容を試された方、アドバイスをお願いします。 数時間を費やしましたが、このエラーを回避できません。

  • Excelを開くときにメッセージボックスを出力させない

    ExcelファイルをVBから開いて全シートを 印刷するプログラムを作っています。 マクロがあるとメッセージボックスが出て 止まってしまいます。 どうやったら出ないようにできるでしょうか? 同様にWordファイルでもメッセージが出ないようにしたいです。 Wordテンプレートを自分で作った場合、 そこにマクロが埋まっていると 相手のマシンではメッセージが出てしまいます。 メッセージが出ないようにするのが無理であれば メッセージが出そうなファイルを 先に検査してエラーとする、でもかまいません。 よろしくお願いします。

  • EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる

    EXCELのVBAでマクロを使ってファイルを開こうとしている際、指定したファイルが存在しなかった場合、普通はマクロのエラーが出て「ファイルが存在しません」となりますが、指定したファイルが存在しなかった場合には、メッセージボックスを表示させ、そこで処理を中止させるか、または、その無いファイルの処理は飛ばして次のファイルの処理を行う用にさせることはできるでしょうか? Sub test1() Workbooks.Open Filename:="C:\Documents and Settings\001.xls (001が存在しない場合メッセージボックスを出しマクロを中止するか次の002を開くか選ぶ) Workbooks.Open Filename:="C:\Documents and Settings\002.xls End sub

  • 空白セルのメッセージボックスでの知らせるマクロ

    はじめまして。下記のExcelについて教えてください。 セルA1からA10の間にデータが入力されているセル、入力されていないセルが混在している場合、データが入力されていないセルをメッセージボックスで知らせるマクロの作成の仕方を教えてください。 空白セルが2つある場合はメッセージボックスは2回表示されます。 ずっと考えていても、分からなくて。。。どうか教えてください。

  • EXCEL メッセージボックスの表示について

    マクロを使ってA列に"1"というデータが入力されたら、 エンターキーを押した(入力確定した)時点でメッセージボックスが表示されるようにしたいのですが、 この表示のさせ方がわかりません。 これができると作業が大分楽になりますので、 わかる方いらっしゃいましたらよろしくお願いいたします。

  • エクセルマクロでシートを削除するときのメッセージ

    エクセルのマクロでシートを削除するときにメッセージボックスで、本当に削除するか確認されて、マクロが中断されてしまいますが、 1) マクロで「Yes」を選択する。 2) システム設定か何かでメッセージボックスを開かないようにする。 のどちらかできないでしょうか? よろしくお願いします。

  • エクセルでセルが変更されたらメッセージボックス表示するマクロ

    あるセル範囲、たとえばA1:B10の範囲に0以外の数字が入力されたらメッセージボックスで 「0以外の数字が入力されました。このまま続けますか?(はい)(いいえ)」 と表示させるマクロを作りたいのですが、どうすれば良いでしょうか。 (いいえ)が選択されたらそのセルへの入力はキャンセルさせたいのですが。 過去ログなどをみてもいまひとつやり方がわからないのでお願いします。

  • エクセルのマクロについて

    エクセルのマクロについてご教示ください。 共有サーバにあるパスワードで保護されたブックを、別のブックの シートからマクロボタンで開くと、当然にパスワードを要求されま すが、ここでメッセージボックスのキャンセルボタンを押すと、 Openメソッドは失敗しました。Workbooksオブジェクトという実行時 エラーが表示されます。  このエラー表示を回避できる方法をご教示ください。  If文で処理しようと試みましたがだめでした。  よろしくお願いいたします。 

  • エクセル メッセージボックスの出し方

    エクセルでオートシェイプでボタンを作り、ボタンをクリックするとsheet2へデーターが入力されるようにマクロで作りました。 (1)入力ボタンを押したらメッセージボックスで”記録されました”と画面に表したいのですが・・教えてください。

  • Excelマクロのコンボボックスについて

    初めてマクロを扱います。 マクロに詳しい方、コードをご教授ください。 Excelマクロを使い下記の機能をシートに盛り込みたいと考えております。 【実現したいこと】 ・シート上にコンボボックスを作成し、コンボボックスで選択した項目で絞り込めるようにする。 ・コンボボックスに格納される項目は、A列の重複を除外し、昇順で並べ替えたもの。 ・またコンボボックスに格納する項目は日々レコード追加されるため、コンボボックスの中身にも随時反映するようにしたい。 ・コンボボックスには「全て表示」というアイテムを追加し、「全て表示」を選択すると、フィルターが解除される。 わかりにくいかもしれませんが上記のことを実現したいと考えております。 どうかお知恵をお貸しください!! よろしくお願いします!!

専門家に質問してみよう