Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2485 / 13646 ツリー ←次へ | 前へ→

【67737】ユーザーフォームをModelessに設定するとPCがフリーズしてしまいます。 おぢちゃん 11/1/6(木) 8:23 質問[未読]
【67743】Re:ユーザーフォームをModelessに設定するとPCがフ... UO3 11/1/6(木) 13:00 発言[未読]
【67745】Re:ユーザーフォームをModelessに設定するとPCがフ... おぢちゃん 11/1/6(木) 13:55 発言[未読]
【67747】Re:ユーザーフォームをModelessに設定するとPCがフ... UO3 11/1/6(木) 14:23 発言[未読]
【67748】Re:ユーザーフォームをModelessに設定するとPCがフ... とおりすがり 11/1/6(木) 14:31 回答[未読]
【67753】Re:ユーザーフォームをModelessに設定するとPCがフ... おぢちゃん 11/1/6(木) 16:50 お礼[未読]
【67754】Re:ユーザーフォームをModelessに設定するとPCがフ... UO3 11/1/6(木) 17:22 回答[未読]
【67756】Re:ユーザーフォームをModelessに設定するとPCがフ... おぢちゃん 11/1/6(木) 17:46 お礼[未読]

【67737】ユーザーフォームをModelessに設定するとPCがフリ...
質問  おぢちゃん  - 11/1/6(木) 8:23 -

引用なし
パスワード
   いつも参考にさせていただいています。

<UserForm>.Show vbModeless
にてフォームを起動させると空白のウィンドウが表示されPCが固まってしまいます。
なぜでしょう?
解決のヒントとなる手掛かりがあればお教え下さい。
なおユーザーフォームプロパティでShowModalをFalseに設定しても同様の動作をしてしまいます。

試しに作った,ボタンを1個乗せただけのユーザーフォームでは思惑通りModelessの動作をするのですが。
WindowsXP,Excel2007で使用しています。

【67743】Re:ユーザーフォームをModelessに設定するとPCが...
発言  UO3  - 11/1/6(木) 13:00 -

引用なし
パスワード
   ▼おぢちゃん さん:

こんにちは
回答じゃなく質問です。

2007では <UserForm> という書き方ができるのですか?
それとも、<UserForm>の部分はユーザーフォームのオブジェクト名ということですか?

後者だとして、固まるユーザーフォームはコントロールが何も配置されていないもので
コマンドボタン等、1つでも配置があれば固まらないということですか?

ユーザーフォームモジュールのInitializeやActivateで何かコードがかかれていませんか?

【67745】Re:ユーザーフォームをModelessに設定するとPCが...
発言  おぢちゃん  - 11/1/6(木) 13:55 -

引用なし
パスワード
   ▼UO3 さん:
>それとも、<UserForm>の部分はユーザーフォームのオブジェクト名ということですか?

失礼しました。<UserForm>にはオブジェクト名が入っています。

>後者だとして、固まるユーザーフォームはコントロールが何も配置されていないもので
>コマンドボタン等、1つでも配置があれば固まらないということですか?

ユーザーフォーム上にはコントロールが配置してあります。

今まではModal設定で使用していたのですが、使用者からの希望でModelessにしようとしたところ、所定の動作ができない状態です。

同一BOOK上で別フォームを作って試してみましたがやはりModelessではPCが固まってしまいます。BOOKに不具合があるのでしょうか?

【67747】Re:ユーザーフォームをModelessに設定するとPCが...
発言  UO3  - 11/1/6(木) 14:23 -

引用なし
パスワード
   ▼おぢちゃん さん:

う〜ん・・・
わからないですねぇ・

1.VBE画面で、その問題のあるユーザーフォームをエクスポートして
2.新規ブックを作成して、そこにインポートして
3.その新規ブックでモードレス表示

こうすると、どうなるでしょうか。
これで、表示されれば、ブックに何か問題があるという可能性があります。

どうも、そうではない予感(?)がしているんですが・・・

問題のユーザーフォームモジュールのInitializeあるいはActivateの
ルーティンにコードがあればアップいただけませんか。

【67748】Re:ユーザーフォームをModelessに設定するとPCが...
回答  とおりすがり  - 11/1/6(木) 14:31 -

引用なし
パスワード
   別Bookで件のUserFormと同じControlを設置し、同じCodeを書いて、実行。

問題なし→件のBookが壊れている。とっとと捨てる。

問題あり→別PCで実行。

     問題なし→Excelその他が壊れているか、レジストリが壊れている。修復する。

     問題あり→Codeがおかしいとおもわれ。

【67753】Re:ユーザーフォームをModelessに設定するとPCが...
お礼  おぢちゃん  - 11/1/6(木) 16:50 -

引用なし
パスワード
   新しいBOOKで再作成後,別のPCで操作しても同様のエラーが出るので
コードミスと考え,以前作成した別マクロと比較しましたところ

ユーザーフォーム起動コードの

Private Sub CbtStrt_Click()
MyDlg = True
Do Until MyDlg = False
UserFrm.Show
Loop
End Sub

の内
"Do Until MyDlg = False"
"Loop"
を削除するとModelessで動作するようになりました。

ありがとうございました。

でも何故"Do Until〜 Loop"ステートメントが悪さしているか理解できません。
どこで無限ループに入り込んだのでしょうか?

【67754】Re:ユーザーフォームをModelessに設定するとPCが...
回答  UO3  - 11/1/6(木) 17:22 -

引用なし
パスワード
   ▼おぢちゃん さん:

こんにちは

Private Sub CbtStrt_Click()
MyDlg = True
Do Until MyDlg = False   '*1
UserFrm.Show        '*2
Loop            '*3
End Sub

以前はモーダル表示だったわけですよね。
モーダル表示ということは *2 でUserFrmを表示したあと、UserFrm側で
Unloadするまでは、制御がもどってきません。
おそらくは、UserFrm側で、もうやめ、あるいは次の処理をする ということを
選択できるようになっていて、もうやめ の場合は Public変数のmyDlgをFalseにして戻る。
で、もどってきたCbtStrt_Clickで次のコードであるLoopを実行。すると、Do で myDlgが
FalseなのでLoopを抜ける。

こんな仕掛けだったんでしょうね。

ところが、もドレスだとShowによりUserFrmが表示された後、UserFrm側でmyDlgをFalseに
しないまま、すぐにCbtStrt_Clickに戻ります。でLoop -> Do ではmyDlgがFalseではないので
またもや UserFrm.Show 。
延々と、これを繰り返すわけです。

【67756】Re:ユーザーフォームをModelessに設定するとPCが...
お礼  おぢちゃん  - 11/1/6(木) 17:46 -

引用なし
パスワード
   ▼UO3 さん:
>
>ところが、もドレスだとShowによりUserFrmが表示された後、UserFrm側でmyDlgをFalseに
>しないまま、すぐにCbtStrt_Clickに戻ります。でLoop -> Do ではmyDlgがFalseではないので
>またもや UserFrm.Show 。
>延々と、これを繰り返すわけです。

うーむなるほど…わかったような解ってないような
(ということは解ってないんでしょうね。きっと。)

…日々精進いたします。
皆様本年もよろしくお願いします。
ありがとうございました。

2485 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free