プロが教える店舗&オフィスのセキュリティ対策術

エクセル2003を使用しています。

VBAで、下記のように、起動時にメッセージを表示させているのですが、
表示されたダイアログの「OK」を押さないと、ダイアログが消えないのと同時にエクセルの編集ができません。
---------------------
Sub Auto_Open()
MsgBox "******"
End Sub
---------------------

このダイアログを、指定した時間で、自動で消えるようにできるのでしょうか?

ご教授いただけます方、どうぞ、よろしくお願い申し上げます。m(_ _)m

A 回答 (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

'-------------------------------------------
ところで、失礼ですが、「薄学」という言葉が気になり、調べてみましたが、辞書にはありません。同じ読みの「博学」という言葉は、逆の意味に近いです。「浅学」とか「寡聞(かぶん)」という言葉がありますが、一度調べてみてください。
    • good
    • 1
この回答へのお礼

できました!
ユーザーフォームを作り、標準モジュールに、ご教授いただきましたものを記述しましたら、理想のものができました!

本当にありがとうございました!

ところで「薄学」の件ですが、私も、変換する際「博学」しかなく、おかしいなと思っておりましたが、知識のないことを「薄学」というと勘違いで思い込んでおりました。以後気をつけます。
こちらの件でも、ご教授ありがとうございました!

お礼日時:2009/10/27 16:52

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
    • good
    • 0
この回答へのお礼

うまくいきました、ご丁寧な解説に感謝いたします。
ありがとうございます。

お礼日時:2009/10/27 14:24

回答2の方のURLをちゃんと見たのでしょうか?


こちらに詳しく説明があります。
http://officetanaka.net/excel/vba/tips/tips21.htm
    • good
    • 0
この回答へのお礼

ご教授ありがとうございます、感謝いたします。

やっとわかりました。
ただ、マクロを実行すると、ダイアログが表示されるのですが、エクセルファイルを開いたときには変化がなかったので、悩んでおりました。

このマクロを、起動時に実行することは可能でしょうか?
同じ質問内で、複数の質問はしないように怒られそうなのですが、
もしよろしければ、ご教授いただけましたら幸いです。

お礼日時:2009/10/27 14:40

こんばんは。



そのまま貼り付ければよいだけです。

Sub Auto_Open()

CreateObject("WScript.Shell").Popup "このメッセージボックスは2秒後自動的に閉じます。", 2, "自動的に閉じるメッセージ"

End Sub

なお、このWScipt ヘルプは、Microsoft のサイトに 『Windows Script 5.6 ドキュメント』という名称でダウンロードできます。

この回答への補足

このご回答も、次点良回答に指定させていただきたかったのですが、良回答と同じ方を指定できませんでしたので、申しわけございません。

補足日時:2009/10/27 16:56
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます、うまくいきました。
Sub Auto_Open()
End Sub
がなくて、VBAプロジェクトのどこに貼り付けてもうまくいかなかったのですね、
本当に薄学で申し訳ありません 泣 orz

この方法が、一番簡素で使わせていただきたいのですが、ダイアログに表示される「OK」ボタンを表示しないようにしたいのですが、これは可能でしょうか?

ご存知の方がおられましたら、よろしくお願い申し上げます

お礼日時:2009/10/27 14:34

こんにちは。



こんな感じですね。

CreateObject("WScript.Shell").Popup "このメッセージボックスは2秒後自動的に閉じます。", 2, "自動的に閉じるメッセージ"

正確に2秒なのかは分かりません。

他の方法もありますが、かなり重装備になってしまいます。

この回答への補足

#2の方のご回答も参照し、ネットでもいろいろ調べましたが、
どこに、どのようにこの構文を記述してよいかがわかりません。

薄学で、申し訳ありませんが、もう少しヒントをいただけないでしょうか?

本当に申し訳ありませんが、よろしくお願い申し上げます。

補足日時:2009/10/25 22:35
    • good
    • 0
    • good
    • 0

>このダイアログを、指定した時間で、自動で消えるようにできるのでしょうか?



ご希望の事は不可能です。
どうしてもと言うなら、ユーザーフォームを作成して、タイマー処理でクローズするような物を自分で作るしかありません。

この回答への補足

そうなんですね orz
「ユーザーフォームを作成して、タイマー処理でクローズするような物」

とのことですが、「ユーザーフォーム」はわかったのですが、
「タイマー処理」の記述がわかればご教授いただけませんでしょうか?

申し訳ありませんが、ご教授いただけましたら、よろしくお願い申し上げます。

補足日時:2009/10/25 00:21
    • good
    • 0

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

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


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