msgboxについて


kanko  2003-03-05 18:46:59  No: 77302

Excelでmsgboxを2秒間だけ表示させて自動的に閉じさせるには、どうしたらいいのか解りません。sendkeysを使えばいいのか・・・?
すみませんが、よろしくお願いします。


たかみちえ  URL  2003-03-05 22:32:28  No: 77303

msgboxに限らず、普通のメッセージボックスはモーダルダイアログとして表示します。
(つまり、表示中は次の命令が実行されない)
  なので、msgboxでは無理です。

  たしか、メッセージボックス系のAPIに、そういうことができるものもあったと思いますけど、覚えていません。

  でも、使い方を考えると、
ボタンのないフォームを表示させたほうが早いような気もしますけど?


こだまっち  URL  2003-03-15 02:56:00  No: 77304

普通のフォームをmsgbox風にして、フォームロードのときにタイマーを起動させてみたら動でしょうか?


t@Ki  2003-03-19 04:15:16  No: 77305

余計なコントロールを使いたくなければ
フォームを表示した後、APIのSleep関数を使って処理を2秒間停止させ
直後にアンロードするという手もあります。


魔界の仮面弁士  2003-03-19 06:18:34  No: 77306

処理を停止させるだけなら、Sleep APIを使わなくても、
   Application.Wait DateAdd("s", 2, Now)
で充分かも。


魔界の仮面弁士  2003-03-19 11:56:09  No: 77307

なお、Sleep APIやWaitメソッドで停止させた場合、その間は
Excelの操作は一切できなくなります。

もし、「2秒後に自動的に閉じる」だけではなく、
「通常通り、MsgBoxの[OK]を押して閉じる」という動作も
行わせたいのであれば、Sleep/Watiは使えませんので、
かわりに、WshShellオブジェクトのPopupを利用してみてください。

intButton = CreateObject("WScript.Shell").Popup( _
        "2秒たってもボタンが押されなければ、-1が返されます。", _
        2, _
        "ここはタイトル部です", _
        vbInformation)

ただしこの方法は、Windows Scripting Host(WSH)のVersion 1.0以上が
インストールされている環境でしか利用できません。
(最近のOSであれば、WSH2.0以上が最初から入っていますけれどね)

もし、WSHを利用できないような場合は、自作のUserFormなどを使って、
自前でタイマー処理を行うようにするしか無いと思います。

——ただし、ExcelのUserFormには、AccessのFormの様なTimerイベントは
実装されていませんし、VBのようにTimerコントロールが付属している
わけでもないので……少々厄介かもしれませんけれども。

# ActiveXコントロールに頼っても良いのであれば、IeTimer.ocxなどを
http://activex.microsoft.com/controls/iexplorer/x86/ietimer.cab
# 使うなどの方法もありますが、どうせインストールするなら、
# IeTimerよりも、先のWSHを入れてしまった方が手軽かも。(^^;


魔界の仮面弁士  2003-03-19 23:41:06  No: 77308

調べてみたら、ExcelにはOnTimeというメソッドがあるようですね。

先のWshShell.Popupを使わず、自作のフォームで実装するのであれば、
こんな感じでいけるかも。

'--- 標準モジュール ---

Option Explicit
Public Sub CloseForm()
    UserForm1.CloseTime = Empty
    Unload UserForm1
End Sub

'--- UserForm ---

Option Explicit
Public CloseTime As Variant
Private Sub CommandButton1_Click()
    Unload Me
End Sub
Private Sub UserForm_Initialize()
    CloseTime = DateAdd("s", 2, Now)
    Application.OnTime CloseTime, "CloseForm"
End Sub
Private Sub UserForm_Terminate()
    If Not IsEmpty(CloseTime) Then
        Application.OnTime CloseTime, "CloseForm", , False
    End If
End Sub


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加