dポイントプレゼントキャンペーン実施中!

今、ユーザーフォームを勉強しています。
手始めに、ラベルを表示して、2秒経ったら消す。
ということをやろうとして下記の通り書きましたが、
消えてくれません。
何処が間違っているのでしょうか。
宜しくお願いします。

Sub test2()
Load UserForm1
UserForm1.Label1.Caption = "ABC"
UserForm1.Show
Sleep 2000
UserForm1.Hide
Unload UserForm1
End Sub

A 回答 (2件)

難しい質問ですね。


ご自身で参考にしたコードがあるのでしょうか。
ModalMode に関しては、なんとも言えないのは、UserForm 上で、Lable に命令を出しているからです。
それがなければ、後は補填するだけで済みます。
なお、Sleep を使っていらっしゃるようですが、Sleep 自体は、Win API ですから、もちろん、エラーが出ているはずです。

Load UserForm1
UserForm1.Label1.Caption = "ABC"
UserForm1.Show
Sleep 2000 --ここまでで、UserForm のメモリが安定しないので、Label の操作ができないのではないでしょうか。

ふつう、自己消去型のメッセージは、Win API を利用するのですが、UserForm を活かすなら、

Sub test2()
 Application.OnTime Now + TimeSerial(0, 0, 2), "UserFormColse"
 With UserForm1
  .Label1.Caption = "ABC" 'マクロが一定の終了をしないと出てこない
  .Show 'vbModeless 'この場合は、どちらでもよい。
 End With
End Sub

Sub UserFormColse()
 Unload UserForm1
End Sub

Label.Caption ="ABC" がなければ、問題はSleep の部分と余分な部分を切り落とすだけです。
こんなふうにしか私は思いつかなかったです。

その代用品として、このようなコードがあります。
Private Declare Function MessageBoxTimeoutA Lib "user32" (ByVal hWnd As Long, ByVal _
lpText As String, ByVal lpCaption As String, ByVal uType As Long, ByVal _
wLanguageId As Long, ByVal dwMilliseconds As Long) As Long

Sub TimeOutMessage()
MessageBoxTimeoutA 0&, "ABC", "メッセージ", vbMsgBoxSetForeground, 0, 2000 '2秒
End Sub

参考まで。
    • good
    • 1
この回答へのお礼

早速有り難うございました。
全て了解です。
確かに、
>UserForm 上で、Lable に命令を出しているからです。
 このとおりで、無ければ1番の方のとおりに動きました。

結局、例示いただいたように一度マクロを終了する必要があるのですね。
msgbox を入れてみたらlableが表示されました。

また、代用品ですが、これは持っていましたが、
今回はユーザーフォームの勉強なので別とします。
なお、sleepはお手数をかけてしまいましたが、
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)は書いてありました。

お世話になりました。

お礼日時:2019/03/25 07:26

VBAのヘルプには、次のように記載されています。



ユーザー フォームがモードレスのとき、次のコードは中断されずに継続して実行されます。
ユーザー フォームがモーダルの場合、アプリケーション内の他の部分を使用する前に、ユーザーは必ず応答する必要があります。ユーザー フォームを非表示にするか、またはアンロードするまで、次のコードは実行されません。

ようするに、ユーザフォームをモードレスで表示しないと思った動作になりません。こんな感じです。

UserForm1.Show vbModeless
    • good
    • 0
この回答へのお礼

早速有り難うございました。
vbmodeless
helpを頂き、良く分かりました。
確かにそのとおりに動きました。
お世話になりました。

お礼日時:2019/03/25 07:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A