• ベストアンサー

エクセルVBAでエクセルがハングアップしてしまう!

素人ですよろしくお願いします。 --------------------------- 大量のコマンドボタンを配置したフォームを終了(Hide)して、再度エクセルファイルを立ち上げても正しく動く。 しかし、一旦エクセルを 終了後、再起動してファイルを立ち上げると、エクセルがハングアップする。 〔参考〕 For i = 1 To 775 'i=ボタンの番号 Controls("CommandButton" & i).Caption = "予定" Next

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

関係あるか解りませんが、Hide は非表示にするだけなので、終了は Unload UserForm1 のようにした方が良いと思います。 それよりも、ひとつのUserFormに775個もコマンドボタンを使うの? どんな事をされたいのか不明ですが、仕様そのものを見直した方が良いような、、、

関連するQ&A

  • ワークシート上に配置したコマンドボタンの操作

    OS:WinXP-Home Office:Excel2000 を使用して、VBAのマクロを作成しています ワークシートに複数のコマンドボタンを配置して 各ボタンのcaptionに複数のワークシート名をそのまま代入したいと思っているのですが 以下のソースでは実行できませんでした 記述先はコマンドボタンを貼り付けたシートです 試しに11枚のワークシートと10個のコマンドボタンで実行してみました Private Sub Worksheet_Activate() For i = 1 To 10 Controls("CommandButton" & i).Caption = Sheets(i + 1).Name Next i End Sub 以下のように一つずつ指定すればうまく行くのですが CommandButton1.Caption = Sheets(2).Name CommandButton2.Caption = Sheets(3).Name ・ ・ ユーザフォーム上のコントロールと違って 「Controls()」での操作は出来ないのでしょうか? 自力で検索したところ OLEObjects("CommandButton" & i).Caption = Sheets(i + 1).Name Controls.Item("CommandButton" & i).Caption = Sheets(i + 1).Name の方法も試してみましたがやはりうまく行きませんでした よろしくお願いします

  • エクセルマクロ(VBA)での手順

    エクセルマクロ(Vba)にて、ご教示をお願い致します。 ユーザーフォーム上にデータをクリアするコマンドボタンを沢山貼り付けております。 一括クリアするボタンを作成したのですが長文になってしまいます。 Private Sub CommandButton101_Click()   Call CommandButton1_Click   Call CommandButton2_Click   Call CommandButton3_Click   Call CommandButton4_Click   Call CommandButton5_Click   Call CommandButton6_Click ↓ ↓ ↓   Call CommandButton50_Click End Sub 以下のような内容に置き換えたいのですが、上手くいきません。 For i = 1 To 50 Me.Controls ("CommandButton1" & i & "_Click") Next 本を片手に、やっておるのですが行き詰ってしまいました。 お知恵を拝借させてください。 よろしくお願いたします。

  • エクセルVBAについて

    エクセルのVBAについて、質問させて下さい。 下記コードはform上に記述しました。 オプションコマンドのオブジェクト数をcaseで選択し、その選択したものを格納しています。 Private Sub CommandButton1_Click() Dim i As Long lngData(1) = 0 For i = 1 To 12 If Me.Controls("OptionButton" & i).Value Then lngData(1) = i Exit For End If Next Select Case lngData(2) '←次のUserForm Case 1 Unload Me UserForm2.Show ・・・・ End Select End Sub でまた別form上で呼び出しているのですが、 この時にオプションコマンドcaptionを格納するにはどういったコードになるのでしょうか? またそれに際してコードに変更がある場合も教えてください。 素人質問ですので、そもそもオプションボタンのcaptionは格納なんてできないのなら諦めます。 では、よろしくお願い致します。 以上

  • エクセルVBAのオブジェクトのハンドリングについて

    一応以下のVBAを作って稼動していますが、もっとスマートな方法はないでしょうか。ご存知の方よろしくお願いもうしあげます。 シートやフォームのボタン・ラベルのキャプション、テキストボックスのテキスト、チェックボタンの値をiniファイルに保存し、次回それを使用するVBAを作りました。 iniファイルの中身は以下ようになっています。 [シート名] CommandButton1.Caption=xxxx Label3.Caption=yyyy TextBox6.Text=zzzz ・ ・ [フォーム名] CommandButton8.Caption=xxxx Label5.Caption=yyyy ・ ・ iniファイル作成時はkeyには"CommandButton1.Caption"、その値にはSheets("シート名").CommandButton1.Captionなどの様に個々のオブジェクトを指定しています。 iniファイル読取時はSelect Case文でkey"CommandButton1.Caption"だったら.CommandButton1.Captionに値をセットするようにしています。 セットする個々のオブジェクト全てに書出し、読取りを行っていますのでとても冗長なVBAの記述になっています。 個々のオブジェクトを指定せずに書き出す方法、及びiniファイルに書かれているオブジェクト名で該当オブジェクトに値を設定する方法が知りたいのです。

  • エクセルVBAでmeに相当するものは?

    コマンドボタンやラベルの自分自身の情報を得る汎用的な方法はないでしょうか。 例えばCommandButton1のCaptionを表示する場合、以下のようにコーディングしています。 Private Sub CommandButton1_Click()    MsgBox CommandButton1.Caption End Sub CommandButton1.Captionと書いておりますが、CommandButton1と書かずに自分自身を指定する方法はないでしょうか? 遥か昔マッキントッシュのハイパーカードでは、自分自身の名称を得る時に「name of me」で可能でしたが、このmeに相当するものはエクセルではどのようになるのでしょうか? よろしくお願い申し上げます。

  • Excel VBA オプションボタンについて

    こんばんは オプションボタンが5つあり、 登録ボタンが1つあるユーザーフォームを作りました。 このオプションにチェックを入れずに登録ボタンを押したときに 「必ず選択してください。」とメッセージを表示し、再度入力させるようにしたいのですが、どうしたらよいのでしょうか。 Excelのバージョンは2003です。 調べたところ (1)で動きそうだ。ということが判ったのですがチェックを入れ値がtrueになるとエラーが発生して止まってしまいます。(理由がわかりません) Private Sub commandbutton2_click() Dim opt As ControlFormat, flg As Boolean flg = False For Each opt In frame1.Controls If opt.Value = True Then '←ここの行でtrueだった場合のエラーが発生してしまう。 flg = True Selection.Value = opt.Caption End If Next Unload userform1 End Sub (2)この方法で何とか動いたのですが、初めの方に書いたとおり、オプションボタンが選択されずに登録ボタンが押された場合、チェックするように促すメッセージを表示する方法がわかりません。また、できればユーザーホームの×ボタンを押せなくする方法もしくは、閉じられた場合にマクロを抜けるようにするにはどうしたらよいのでしょうか。宜しくお願い致します。 Private Sub commandbutton1_click() Dim i As Integer For i = 1 To 5 If Me.Controls("optionbutton" & i).Value = True Then Selection.Value = Me.Controls("optionbutton" & i).Caption End If Next i Unload userform1 End Sub

  • 【エクセル2003】マクロ終了後、フォームを閉じたくない。

    ユーザーフォームを挿入し、 Private Sub CommandButton1_Click() ActiveSheet.Delete Sheets.Add End Sub というコードを書き、 図のように配置しています。 やりたいことは、シート上にもコントロールがある状態で、 フォームを実行し、コードを終了させても、フォームは表示させたままにしたいのです。 しかし、図の状態で上記のコードを実行すると、フォームも閉じてしまいます。 コマンドボタンがシート上になければ コードが終わってもフォームは閉じません。 どうすればコマンドボタンも配置しつつ、シートごと削除させ、 フォームを表示したままにすることが可能なのでしょうか? よろしくお願いします。

  • VBAでコマンドボタンを作成~実行するには

    いつもお世話になっております。 今回やりたいことは、 1 ワークシートからユーザーフォームのチェックボックス作成(多数変動) 2 「1」が数に変動があるため、最下段にコマンドボタン作成 3 「2」で作成したボタン実行で、チェック=Trueを印刷 です。 現在、3の手順で止まっています。 まず、 Private Sub UserForm_Initialize() 内で、 Set CMD = Me.Controls.Add("Forms.CommandButton.1") With CMD .name = PrintStart .Height = 30 .Width = Me.Width - 20 .Left = 10 .Top = 230 .Caption = "印刷する" End With としてボタンを作成しています。 次に Private Sub PrintStart_Click() 内で、先にテストがしたかったので、  for i = 1 to end  '(end = 変数)    name = Me.Controls("CheckBox" & i).Caption '(name = string変数) MsgBox (name) Next i としているのですが、ここで動作してくれない状況です。 ちなみにフォーム自体の大きさも、その時の行数に応じて自動生成にしているのですが、それをやめて、 あらかじめ縦になが~いフォームに固定しておいてボタンを置いておき、 そのボタン(CommandButton1)で上記のコードを実行すると、うまくいきました。 ただ、プログラマのみなさんなら分かってくれると思いますが、見た目ってこだわりたいですよね?ね? よろしくお願いします。

  • エクセルVBA

    ユーザーフォームがあり、コマンドボタンが準備されています そのコマンドボタンをクリックした場合、処理1~処理3を実行するようにしています Sub CommandButton1_Click() CommandButton1処理1 CommandButton1処理2 CommandButton1処理3 End Sub Private Sub CommandButton1処理1() ・・・ End Sub Private Sub CommandButton1処理2() ・・・ End Sub Private Sub CommandButton1処理3() ・・・ End Sub 処理1→処理2→処理3という流れが進むかと思います 処理1の中にIf~End ifがあり、Ifに合致する場合はメッセージボックスが表示するようになっています 処理3の中に、「ユーザーフォームを閉じる」記載がされています 処理1のIfに合致する場合、メッセージボックスを表示させユーザーフォームを閉じることなく終了したいです つまりIfに合致した場合、その後の処理2、処理3をさせず処理1で終了させればいいのかと思ったのですが、そのようなことはできるのでしょうか? 処理1でIfに合致する場合、Exit Subとすると処理1は終了するかもしれませんが、その後処理2、処理3に進んでしまうので困っています よろしくお願いします

  • エクセル不可解な現象?ではないと思うのですが。

    初歩的な質問ですがエクセルVBAの操作方法についてお尋ねします。 コントロールの編集とマクロの設定についてお尋ねします。 エクセルをたちあげ、シート1が表示されている状態にします。 次に、表示→ツールバー→コントロールボックスを表示し、コントロールボックスより シート上にコマンドボタンを配置します、CommandButton1が配置されたらこのボタンをダブルクリックするとVsualBasicEditerが立ち上がります。 プロジェクトエクスプローラーが表示され、シート1が選択されていることが確認できます。 ここで簡単なプログラムを書きます。 Sub CommandButton1_Click () UserForm1.Show End Sub 更に、挿入メニューよりユーザーフォームを挿入します。 この状態で、VsualBasicEditer上で 実行→Sub/ユーザーフォームの実行をクリックします。 プログラムが実行されUserAForm1が表示されます。 ここでUserForm1の閉じるボタンでUserForm1を閉じます。 一度プログラムを走らせると、 1:シート1に配置したコマンドボタンをクリックするとプログラムが動作する。   マクロの設定はしていないのに! 2:コマンドボタンの編集が出来なくなる。但し、新規にもう一個ボタンを配置すると   前のボタンの編集が出来るようになると同時にCommandButton1をクリックしても プログラムは走らない。 上記1、2の現象が起こります。  1について:ボタンにマクロの設定がしてないのに何故プログラムが走るのか?   このようなやり方でマクロの設定を行わないでもよいのか?  2について:一度プログラムを走らせても、新規にコントロールを追加するという操作をしないで、編集が出来るようにするにはどうすればよいか。   一度走らせたBookをそのまま保存しサイド立ち上げなおしてもボタンをクリックすればプログラムが動作します。走らせる前と後で何が変わっているのでしょうか?   何処かの設定が変わるのであればその場所を教えてください。

専門家に質問してみよう