• ベストアンサー

EXCEL VBA ユーザーフォームの呼び出し時の不具合について

すいません、EXCEL VBAのユーザーフォームの呼び出し時の不具合について助けていただきたいことがあります。 エクセルでユーザーフォームを作成しているのですが、 Userform1.Showで呼び出したユーザーフォームがフリーズの状態になり、 フォーム内のすべてのオブジェクトが全く機能しなくなりました(右上の「×」にも反応しません)。 ユーザーフォームをクリックするとピープ音が鳴ります。 他のユーザーフォームは正常に作動するようです。 原因が全く思い当たりません。どなたか分かる方がおられましたらよろしくお願いいたします。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

補足ありがとうございます。 いろいろなケースを試してみましたが、再現しませんでした。 1. 経験的に言えば、モードレス表示があやしいと思うのですが...   幾つかのフォームを同時に表示させているようですが、一度全ての   フォームをモーダル表示でやってみるとどうなりますか? 2. 参照設定で「参照不可」の項目はないですか? > すべてのオブジェクトとコードを削除して > 白紙のユーザーフォームを呼び出しても同じ症状が出ます。 3. Userform 自体がバイナリレベルで破損しているのかもしれません。   そのフォームからコントロール等の削除ではなく、新規にフォーム   を挿入し、コントロールのみ元フォームからコピペしてみるとどう   なりますか? > それ以外の方法では画面がフリーズしてエクセルのファイルを閉じる > こともできません。 4. 同時に開いたフォーム側でコードが実行されている可能性は? とりあえず思いつくままに。

takohasisa
質問者

お礼

ありがとうございます。 モーダル表示にしても同じ症状です。 参照不可の項目もどうもないようです。 とりあえず3の方法でやってみましたら 新しいフォームは正常に作動しましたのでこれで凌ごうと思います。 色々とありがとうございました。

その他の回答 (1)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんにちは。 なぜ問題となっているフォームのコードを提示しないのでしょうか? ・無限ループしているのでは?  Ctrl+Pause キーで中断させることはできませんか? ・フォームの表示方法はモーダル?モードレス? ・VBA 標準以外のコントロールは使っていますか? ・API、特にサブクラス化とかしていますか? などなど、いろんな原因は想像できますけど、最初からコードの 提示がないとお互いに意味のほとんどないやり取りが必要になって しまいます。

takohasisa
質問者

お礼

そうですね。もう少し詳しく症状がないとだめですね。失礼しました。 表示方法はvbModelessで呼び出しています。 VBA以外のコントロールは使っていません。 フォーム内にテキストボックスやオプションボタンが合計で20個くらいありますが、 ループになるようなコードは作ってありません。 というか色や配置を決め終わった段階ですので、ほとんどコードはありません。 Private Sub UserForm_Initialize() UserForm1.ComboBox1.IMEMode = fmIMEModeOff UserForm1.TextBox1.IMEMode = fmIMEModeOff UserForm3.ComboBox1.AddItem Date End Sub だけです。 Ctrl+Pause キーでフォームは消えますが、 それ以外の方法では画面がフリーズしてエクセルのファイルを閉じることもできません。 すべてのオブジェクトとコードを削除して 白紙のユーザーフォームを呼び出しても同じ症状が出ます。

関連するQ&A

  • Excel vbaでフォームの起動が失敗する

    Excelシート上に設置したユーザフォームを開くボタンを実行するとフォームが開かずに新規のExcelシートが開いてしまいます。 以前までは正常に作動していたんですが••• ちなみにボタンの実行前に vbaの編集画面を一度でも開いた後はボタンを押したら正常にフォームが開くんです。 フォームを開くコード sub 起動() UserForm1.Show End Sub フォームのInitializeはコンボボックスのみです。 原因がわかりましでしょうか?

  • フォームを閉じる時はとうすればいいのでしょうか?

    VBAでユーザーフォームを表示するときは、 UserForm1.Show でできますが、 閉じる時はとうすればいいのでしょうか? UserForm1.Closeを実行すると コンパイルエラーになってしまいます。 ちなみにエクセル2007です。 ご教授よろしくお願いします。

  • 2つのユーザーフォームの表示切替(Excel2002VBA)

    Excel2002VBAを使用しています。 UserForm1 に CommandButton1 を配置したものと UserForm2 に CommandButton2 を配置したもの があります。 UserForm1が表示されている時、CommandButton1 を クリックすると、UserForm2 が表示され UserForm1 が非表示になり、 UserForm2 が表示されている時  CommandButton2 をクリックすると UserForm1 が 表示され UserForm2 が非表示になる というように 画面上にどちらか一方だけユーザーフォームを表示 させたいのですが上手くいきません。 CommandButton1 の Clickイベントに UserForm2.show vbmodeless Unload UserForm1 CommandButton2 の Clickイベントに UserForm1.show vbmodeless Unload UserForm2 と記述したのですが、実行すると、 ”このオブジェクトは、ロードまたはアンロード することはできません。”とエラー表示が出てき ます。 何とぞご教授よろしくお願いいたします。

  • エクセル VBA ユーザーフォームを閉じる

    ユーザーフォームを開く時は UserForm1.Showですが 閉じる時は? UserForm1.Close だとコンパイルエラーになります。 End にするしかないですか?

  • VBA ユーザフォームを非アクティブ固定にしたい

    エクセルVBAで作成されたプログラムで、一点改善したい点があります。 処理の開始を命令すると、ユーザフォームが出てきて進捗が「5/100が完了しました」のように 分かるようになっているんですが、処理が進み、この「5/100」の部分が更新される度に フォーカスがユーザフォームに移ってしまい、他の作業をしていると大変不便です。 ユーザフォームまわりのコードは以下のようになっています。 UserForm11.Show UserForm11.Label2.Caption = "処理実行中です。" & "(" & cnt1 & "/" & cnt2 & ")" 進捗を確認しつつ、かつフォーカスしないようにするようなコードはありませんでしょうか。

  • EXCEL VBA ユーザーフォームを修正するとエラーになります

    いつもお世話になっております。 同じような入力作業の手間を省くため、 Excel VBAでユーザーフォームを作りました。 うまく動作するのですが、更に改良を加え、操作を楽にすることを考えました。 プログラムをまとめ、ユーザーフォームに貼り付けてある ボタンを減らそうとしているのですが、ボタンを削除すると、次そのフォームを表示しようとした時、エラーが出ます。 デバックを押すと、userform.show のところが黄色くなります。 一度できあがってしまったユーザーフォームに改良を加える時(主にそこの部品を減らす時)はどうすればいいのでしょうか。 ぜひ、よろしくお願いします。

  • VBAでユーザーフォームの表示を確認

    VBAでユーザーフォームが表示されていなかったら UserForm1.Show vbModeless で表示させるようなプログラムを組みたいのですが 表示されているかどうかはそのようなコードで調べることができますでしょうか?

  • エクセルでユーザーフォームをvbaで作る

    アクセスでフォームをvbaで作る時はCreateFormメソッドで出来ましたが エクセルでユーザーフォームを作る場合はどうすればいいですか? エクセルのオブジェクトブラウザでMSFormsライブラリでCreateで検索しても何もヒットしないことから Createじゃないメソッドで行うと思うのですがどのメソッドでしょうか?

  • VBA ユーザーフォームを速く開く方法について

    VBA ユーザーフォームを速く開く方法について 現在Excel2000を使用しています。 VBAにてユーザーフォーム1と2を作成して、ユーザーフォーム1のコマンドボタンを押すと userform2.showが実行されてユーザーフォーム2が開きますが、フォーム2にはテキスト ボックスなどが約400個程設置してあり、そのせいかフォーム2が開くのに約8~10秒程かかり ます。 そこでそのフォームを速く開きたいのですが、(1秒~2秒程で)どうしたら速く開くでしょうか? Application.DisplayFullScreen = Falseなどを使用しても余り効果がありません。 パソコン自体の処理速度もあると思いますが、できるだけ速くしたいです。 よろしくお願いします。

  • エクセルのユーザーフォームでご教授ください

    マクロの知識はほぼなく、調べながらエクセルの入力用のユーザーフォームを作りましたが、うまく作動しません。 UserForm1 ~~~~~~~~~~~~~~~~~~~~~~~~~ Option Explicit Private Declare Function ReleaseCapture Lib "user32" _ () As Long Private Sub UserForm_Initialize() Me.Show End Sub Private Sub Button_cxl_Click() Me.Hide End Sub Private Sub ok_Click() Dim RowNum As Long Dim Ctrl As Control RowNum = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(RowNum, 1).Value = Me.txt_date Cells(RowNum, 2).Value = Me.txt_guest Cells(RowNum, 3).Value = Me.txt_person Cells(RowNum, 4).Value = Me.txt_begin Cells(RowNum, 5).Value = Me.txt_finish For Each Ctrl In Me.Controls If Ctrl.Name Like "txt*" Then Ctrl.Value = "" RowNum = 0 End If Next Ctrl Me.Hide ReleaseCapture UserForm2.Show vbModal End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~ UserForm2 ~~~~~~~~~~~~~~~~~~~~~~~~~ Option Explicit Private Declare Function ReleaseCapture Lib "user32" _ () As Long Private Sub UserForm_Initialize() End Sub Private Sub ButtonEnd_Click() Unload Me UserForm1.Hide End Sub Private Sub ButtonNext_Click() Unload Me ReleaseCapture UserForm1.Show vbModal End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~ Module1 ~~~~~~~~~~~~~~~~~~~~~~~~~ Sub ユーザーフォーム() UserForm1.Show End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~ UserForm1を開き、Button_cxlで閉じず、もう一度Button_cxlをクリックで閉じる。 UserForm1を開き、Button_okでUserForm2を出し、ButtonEndをクリックでUserForm1にもどる(1と2を数度行き来しても同じ) UserForm1を開き、Button_okでUserForm2を出しButtonNextをクリックでUserForm1にもどりButton_cxlをクリックで閉じず、もう一度クリックしても閉じず、三回目で閉じる。 現状、エクセルを開いた直後のみで発生してます。 一度ユーザーフォームを出し、閉じたあとは意図通り動き、再度エクセルを開くまで発生しません。 ちなみにUserForm2の Private Sub ButtonEnd_Click() Unload Me UserForm1.Hide End Sub 部分の、UserForm1.HideをUnload UserForm1にすると、「オブジェクト変数または With ブロック変数が設定されていません」と出てデバックでModule1の UserForm1.Show が黄色になります。 どこが悪いか教えてください。

専門家に質問してみよう