- ベストアンサー
【エクセル2003】マクロ終了後、フォームを閉じたくない。
ユーザーフォームを挿入し、 Private Sub CommandButton1_Click() ActiveSheet.Delete Sheets.Add End Sub というコードを書き、 図のように配置しています。 やりたいことは、シート上にもコントロールがある状態で、 フォームを実行し、コードを終了させても、フォームは表示させたままにしたいのです。 しかし、図の状態で上記のコードを実行すると、フォームも閉じてしまいます。 コマンドボタンがシート上になければ コードが終わってもフォームは閉じません。 どうすればコマンドボタンも配置しつつ、シートごと削除させ、 フォームを表示したままにすることが可能なのでしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 #1さんの質問に対して、答えているようには私には思えないのです。単語自体が曖昧なのです。あえて、そういう現象を求めたりするよりも、回答者側が、作ってあげたほうがよいように思います。 UserForm のCommandButton に以下のようなコードを付けます。 '------------------------------------------- Private Sub CommandButton1_Click() With ActiveWorkbook If .Worksheets.Count > 1 Then Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True .Worksheets.Add after:=ActiveSheet End If End With End Sub '------------------------------------------- >他のサブプロシージャーから呼び出しています。 これ自体は構わないのですがコントロールツールのCommandButton を、削除される当該シートに置くべきではないことは言うまでもありません。もし、そのようなことをすれば、起動した、UserForm は、消えてしまいます。本来は、意図的にコードを消すことをいいますが、自分で自分のコードを削除するようなコードのことを、「自爆マクロ」といいます。 この場合は、シートのタブで、一番、左端、通常は、Sheet1 に起動するCommandButton を置くか、ツールボタンとして、メニュー側に置きます。 また、UserForm1.Show False または、UserForm プロパティのモーダルモード(ShowModal) をOffにしておきます。
その他の回答 (1)
- mindatg
- ベストアンサー率48% (110/227)
せめて画像のCommandButton1 のどちらかのCaptionを変えてくれたら分かりやすいんですが。 あと、コントロールなのか、フォームなのかの区別が付きません。 UserFormの方は、VBAEditorから追加したフォームかなぁ?って気もします。 >Private Sub CommandButton1_Click() このイベントはどのボタンを指しているんでしょう? あと、そのUserFormはどこから、どんなタイミングで呼び出しているんでしょうか。 見た感じの流れでは 1.ブックを開く 2.どうにかしてUserForm1を表示 3.UserForm1のボタンを押下し、質問者のコードを実行 4.アクティブシートがコントロールが貼られている・いない関係なく削除され、新規シートが追加される だと思うんですが、ボタンやらのプロパティ弄っても再現できませんでした。 質問内容が大雑把すぎて私には答えようがないので補足を書けば比較的早く回答が。 気長に待ってれば暇を持て余した人があらゆるパターンを想定した答えを出してくれると思います。
お礼
確かにそうですね。 わかりづらくてすいません。 申し訳ないです。 >このイベントはどのボタンを指しているんでしょう? フォーム上のコマンドボタンのイベントです。 >そのUserFormはどこから、どんなタイミングで呼び出しているんでしょうか。 他のサブプロシージャーから呼び出しています。 >ボタンやらのプロパティ弄っても再現できませんでした。 え!! 私だけ起きる現象なのでしょうか!? mindatgさんのエクセルでは、シート上にオブジェクトがあっても シートを削除をするマクロを実行してもフォームは表示されたままなのでしょうか?
お礼
お返事遅くなってすいません。 ありがとうございます。