- ベストアンサー
エクセル VBA 「Sub Auto_Open()」 について
エクセル2003を使用しています。 VBAで、下記のように、起動時にメッセージを表示させているのですが、 表示されたダイアログの「OK」を押さないと、ダイアログが消えないのと同時にエクセルの編集ができません。 --------------------- Sub Auto_Open() MsgBox "******" End Sub --------------------- このダイアログを、指定した時間で、自動で消えるようにできるのでしょうか? ご教授いただけます方、どうぞ、よろしくお願い申し上げます。m(_ _)m
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >ダイアログに表示される「OK」ボタンを表示しないようにしたいのですが、これは可能でしょうか? Popup も MessageBoxTimeoutAも、ボタンの表示しない方法はないと思います。そういう場合は、#1の方がご指摘になった、UserForm を代用して使います。たぶん、ラベルなどに、メッセージを書く方法だと思います。 '標準モジュール(UserForm を一つ作る) '------------------------------------------- Sub Auto_Open() Application.OnTime Now() + TimeSerial(0, 0, 3), "CloseUserForm" '3秒後 UserForm1.Show End Sub Sub CloseUserForm() On Error Resume Next 'ユーザーが閉じてしまった場合の想定 Unload UserForm1 On Error Goto 0 End Sub '------------------------------------------- ところで、失礼ですが、「薄学」という言葉が気になり、調べてみましたが、辞書にはありません。同じ読みの「博学」という言葉は、逆の意味に近いです。「浅学」とか「寡聞(かぶん)」という言葉がありますが、一度調べてみてください。
その他の回答 (6)
- end-u
- ベストアンサー率79% (496/625)
WScript.ShellのPopUpメソッドで時間指定しても、VBAでの実行は不安定で使えないんですよね... ...という事で3案。 '標準モジュール Option Explicit 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 Auto_Open() test1 'test2 'test3 End Sub '--------------------------------------------------------------------- Sub test1() 'Cドライブの\tempフォルダを使います。無い場合は適宜変更必要。 Const f = "c:\temp\test.vbs" Const s = "CreateObject(""WScript.Shell"").PopUp ""3秒後に閉じます。"", 3" Dim n As Long n = FreeFile Open f For Output As #n Print #n, s Close #n Shell "wscript.exe " & f, vbNormalFocus End Sub '--------------------------------------------------------------------- Sub test2() 'ttp://scripting.cocolog-nifty.com/blog/2008/01/vba_7c0d.html MessageBoxTimeoutA 0&, "3秒後に閉じます。", "タイトル", vbMsgBoxSetForeground, 0, 3000 End Sub '--------------------------------------------------------------------- Sub test3() '簡易的にTextBoxを使う例。UserFormを作ったほうがベター。 Const w As Single = 100 'Width Const h As Single = 60 'Height Dim r As Range With ThisWorkbook With .Windows(1) .Zoom = 100 Set r = .VisibleRange End With With .ActiveSheet.TextBoxes.Add(r.Left + (r.Width - w) / 2, _ r.Top + (r.Height - h) / 2, _ w, _ h) .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .Font.Size = 10 .Text = "3秒後に閉じます。" .Interior.Color = vbYellow Application.Wait Now + TimeValue("0:00:03") .Delete End With End With Set r = Nothing End Sub
お礼
うまくいきました、ご丁寧な解説に感謝いたします。 ありがとうございます。
- cistronezk
- ベストアンサー率38% (120/309)
回答2の方のURLをちゃんと見たのでしょうか? こちらに詳しく説明があります。 http://officetanaka.net/excel/vba/tips/tips21.htm
お礼
ご教授ありがとうございます、感謝いたします。 やっとわかりました。 ただ、マクロを実行すると、ダイアログが表示されるのですが、エクセルファイルを開いたときには変化がなかったので、悩んでおりました。 このマクロを、起動時に実行することは可能でしょうか? 同じ質問内で、複数の質問はしないように怒られそうなのですが、 もしよろしければ、ご教授いただけましたら幸いです。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 そのまま貼り付ければよいだけです。 Sub Auto_Open() CreateObject("WScript.Shell").Popup "このメッセージボックスは2秒後自動的に閉じます。", 2, "自動的に閉じるメッセージ" End Sub なお、このWScipt ヘルプは、Microsoft のサイトに 『Windows Script 5.6 ドキュメント』という名称でダウンロードできます。
お礼
ご回答ありがとうございます、うまくいきました。 Sub Auto_Open() End Sub がなくて、VBAプロジェクトのどこに貼り付けてもうまくいかなかったのですね、 本当に薄学で申し訳ありません 泣 orz この方法が、一番簡素で使わせていただきたいのですが、ダイアログに表示される「OK」ボタンを表示しないようにしたいのですが、これは可能でしょうか? ご存知の方がおられましたら、よろしくお願い申し上げます
補足
このご回答も、次点良回答に指定させていただきたかったのですが、良回答と同じ方を指定できませんでしたので、申しわけございません。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 こんな感じですね。 CreateObject("WScript.Shell").Popup "このメッセージボックスは2秒後自動的に閉じます。", 2, "自動的に閉じるメッセージ" 正確に2秒なのかは分かりません。 他の方法もありますが、かなり重装備になってしまいます。
補足
#2の方のご回答も参照し、ネットでもいろいろ調べましたが、 どこに、どのようにこの構文を記述してよいかがわかりません。 薄学で、申し訳ありませんが、もう少しヒントをいただけないでしょうか? 本当に申し訳ありませんが、よろしくお願い申し上げます。
- okormazd
- ベストアンサー率50% (1224/2412)
http://oshiete1.goo.ne.jp/qa4395675.html の#2くらいかな。
- hana-hana3
- ベストアンサー率31% (4940/15541)
>このダイアログを、指定した時間で、自動で消えるようにできるのでしょうか? ご希望の事は不可能です。 どうしてもと言うなら、ユーザーフォームを作成して、タイマー処理でクローズするような物を自分で作るしかありません。
補足
そうなんですね orz 「ユーザーフォームを作成して、タイマー処理でクローズするような物」 とのことですが、「ユーザーフォーム」はわかったのですが、 「タイマー処理」の記述がわかればご教授いただけませんでしょうか? 申し訳ありませんが、ご教授いただけましたら、よろしくお願い申し上げます。
お礼
できました! ユーザーフォームを作り、標準モジュールに、ご教授いただきましたものを記述しましたら、理想のものができました! 本当にありがとうございました! ところで「薄学」の件ですが、私も、変換する際「博学」しかなく、おかしいなと思っておりましたが、知識のないことを「薄学」というと勘違いで思い込んでおりました。以後気をつけます。 こちらの件でも、ご教授ありがとうございました!