🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

2552閲覧

VBA オートメーションエラー'-2147417848(80010108)' ボタン2つを含むシートの再作成

tokita.

総合スコア61

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/11/06 01:06

前提・実現したいこと

Excel 2013のVBAにおいてアクティブシートを削除・再作成し、ボタン2つを表示させるボタンを作成しようとしています。

発生している問題・エラーメッセージ

実行時エラー '-2147417848(80010108)': オートメーション エラーです。 起動されたオブジェクトはクライアントから接続されました。 ※デバッグボタンを押すと、「ActiveSheet.Delete」で停止している。

該当のソースコード

VBA

1Sub reMake() 2 Application.DisplayAlerts = False 3 ActiveSheet.Delete 4 Sheets.Add 5 Set b1 = ActiveSheet.Buttons.Add(1, 0, 100, 10) 6 Set b2 = ActiveSheet.Buttons.Add(1, 10, 100, 10) 7 b1.OnAction = "reMake" 8End Sub

試したこと

  • 上のコードをVBEで実行して作成されたb1を2回クリックすると、オートメーションエラーが発生します。
  • 上のコードをVBEで実行してボタン作成後、ブック再起動して、b1を3回クリックすると、オートメーションエラーが発生します。
  • VBEからF5で実行する場合、発生しません。ループで1000回ほど実行しても発生しません。
  • ActiveSheet.Deleteしない場合、発生しません。

-- アクティブなシート上の全てのオブジェクト削除は、必要な動作です。ここではシート削除→作成で実装しています。

  • b2を作成しない場合、発生しません(但し必要な動作です)
  • Application.DisplayAlerts = Falseは再現に必須でありませんが、メッセージが煩わしいため載せています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ブック内にシートが最低でも1つはないといけません。
ActiveSheet.Delete を行うことでシートが1つもなくなるためにエラーになっているのだと思います。
テストとして、シートを1つ追加してマクロを実行してみてください。
きちんと動くと思います。

対応としては、
・アクティブシートを変数に保持しておいて、先にシートの追加を行ってから削除する
・アクティブシートを削除する前にシートAを追加してマクロ終了時にシートAを削除する

これで行けると思いますのでご確認ください。

▼ 【例】シート作ってからアクティブシートを削除する仕様に変更したもの

vb

1Sub reMake() 2 Application.DisplayAlerts = False 3 Dim ws_Del As Worksheet 4 Set ws_Del = ActiveSheet 5 Sheets.Add 6 Set b1 = ActiveSheet.Buttons.Add(1, 0, 100, 10) 7 Set b2 = ActiveSheet.Buttons.Add(1, 10, 100, 10) 8 b1.OnAction = "reMake" 9 ws_Del.Delete 10End Sub

投稿2019/11/07 02:53

編集2019/11/07 02:57
Youbun

総合スコア125

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tokita.

2019/11/07 07:28 編集

ご回答ありがとうございます。 例に挙げて頂いたコードで動作が確認できました。 追加情報です。 シート再作成する部分と、ボタン作成する部分を別の関数にしたいと考えました。 シート再作成は、使いまわしたいためです。 そのため次のようにしたところ、オートメーションエラーが再発しました。 Sub reMake() Application.DisplayAlerts = False Dim ws_Del As Worksheet Set ws_Del = ActiveSheet Sheets.Add ws_Del.Delete Set b1 = ActiveSheet.Buttons.Add(1, 0, 100, 10) Set b2 = ActiveSheet.Buttons.Add(1, 10, 100, 10) b1.OnAction = "reMake" End Sub 次のようにしたら、発生しませんでした。 Sub reMake() Application.DisplayAlerts = False Dim ws_Del As Worksheet Set ws_Del = ActiveSheet Sheets.Add [a1] = 1 ws_Del.Delete Set b1 = ActiveSheet.Buttons.Add(1, 0, 100, 10) Set b2 = ActiveSheet.Buttons.Add(1, 10, 100, 10) b1.OnAction = "reMake" End Sub 完全に空のシートはシート数を数えるときに何かしら問題を起こすのかもしれません。 ありがとうございました。
Youbun

2019/11/07 07:51 編集

>そのため次のようにしたところ、オートメーションエラーが再発しました。 この行の下に書かれた関数のみを新規作成したブックに貼り付けて動かしてみてください。 特に問題なく動くと思います。 なので、エラーの原因は今回の質問のあったコードとは別のコードで発生していると思います。 原因不明のバグにつながるので暇なときにでも原因追及しておくと後で困らないと思いますよ。
tokita.

2019/11/08 00:18

コメントまでご確認いただきありがとうございます。 「次のようにしたところ、オートメーションエラーが再発しました。」のコードについて ・ブック新規作成 ・VBEを開く ・標準モジュールを追加、該当コードをコピペ ・F5で1回実行 ・できたボタンを2回クリック という手順で、エラー再現している次第です。 仰る通り、(知的好奇心としても)原因追究はしたいのですが これ以上の追求方法が思いつかない所です。 ボタンから3回実行したとき発生して、 VBEから実行したとき発生しないことから ボタンから関数を呼ぶときとVBEから実行するときに何か処理の違いがある…? 等々、短いコードなのにかなり深い問題に接しているように考えています。
Youbun

2019/11/08 00:42

私の環境では同じ操作をしてボタンを何回クリックしてもエラーが出ないので 原因も探れませんでした・・・ 話は変わりますが、書いていたソースで注意しないといけないところがあったのでご報告致します。 Sub reMake() Application.ScreenUpdating = False Application.DisplayAlerts = False Dim ws_Del As Worksheet Set ws_Del = ActiveSheet Sheets.Add ws_Del.Delete Set b1 = ActiveSheet.Buttons.Add(1, 0, 100, 10) Set b2 = ActiveSheet.Buttons.Add(1, 10, 100, 10) b1.OnAction = "reMake" Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub こんな感じで、「Application.DisplayAlerts 」などの表示フラグを止めた場合、 関数の最後で必ず元の値に戻すようにしないと マクロ実行後も警告が出ないようになりますので注意してください。 ついでに、「Application.ScreenUpdating」こいつをfalseにすると 画面の更新が止まるのでマクロの途中で画面が更新されなくなるので余計な遅延がなくなって便利です。
tokita.

2019/11/08 08:00

追加情報までいただきありがとうございます。 環境によって違って残念です。 取り敢えず目の前の問題としては解決したので、まだ何か爆弾を抱えているかもしれないことをコメントに残しつつ、使っていこうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問