• ベストアンサー

エクセル VBA 「Sub Auto_Open()」 について

エクセル2003を使用しています。 VBAで、下記のように、起動時にメッセージを表示させているのですが、 表示されたダイアログの「OK」を押さないと、ダイアログが消えないのと同時にエクセルの編集ができません。 --------------------- Sub Auto_Open() MsgBox "******" End Sub --------------------- このダイアログを、指定した時間で、自動で消えるようにできるのでしょうか? ご教授いただけます方、どうぞ、よろしくお願い申し上げます。m(_ _)m

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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 '------------------------------------------- ところで、失礼ですが、「薄学」という言葉が気になり、調べてみましたが、辞書にはありません。同じ読みの「博学」という言葉は、逆の意味に近いです。「浅学」とか「寡聞(かぶん)」という言葉がありますが、一度調べてみてください。

ein-zwei
質問者

お礼

できました! ユーザーフォームを作り、標準モジュールに、ご教授いただきましたものを記述しましたら、理想のものができました! 本当にありがとうございました! ところで「薄学」の件ですが、私も、変換する際「博学」しかなく、おかしいなと思っておりましたが、知識のないことを「薄学」というと勘違いで思い込んでおりました。以後気をつけます。 こちらの件でも、ご教授ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (6)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.6

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

ein-zwei
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。
回答No.5

回答2の方のURLをちゃんと見たのでしょうか? こちらに詳しく説明があります。 http://officetanaka.net/excel/vba/tips/tips21.htm

ein-zwei
質問者

お礼

ご教授ありがとうございます、感謝いたします。 やっとわかりました。 ただ、マクロを実行すると、ダイアログが表示されるのですが、エクセルファイルを開いたときには変化がなかったので、悩んでおりました。 このマクロを、起動時に実行することは可能でしょうか? 同じ質問内で、複数の質問はしないように怒られそうなのですが、 もしよろしければ、ご教授いただけましたら幸いです。

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。 そのまま貼り付ければよいだけです。 Sub Auto_Open() CreateObject("WScript.Shell").Popup "このメッセージボックスは2秒後自動的に閉じます。", 2, "自動的に閉じるメッセージ" End Sub なお、このWScipt ヘルプは、Microsoft のサイトに 『Windows Script 5.6 ドキュメント』という名称でダウンロードできます。

ein-zwei
質問者

お礼

ご回答ありがとうございます、うまくいきました。 Sub Auto_Open() End Sub がなくて、VBAプロジェクトのどこに貼り付けてもうまくいかなかったのですね、 本当に薄学で申し訳ありません 泣 orz この方法が、一番簡素で使わせていただきたいのですが、ダイアログに表示される「OK」ボタンを表示しないようにしたいのですが、これは可能でしょうか? ご存知の方がおられましたら、よろしくお願い申し上げます

ein-zwei
質問者

補足

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

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 こんな感じですね。 CreateObject("WScript.Shell").Popup "このメッセージボックスは2秒後自動的に閉じます。", 2, "自動的に閉じるメッセージ" 正確に2秒なのかは分かりません。 他の方法もありますが、かなり重装備になってしまいます。

ein-zwei
質問者

補足

#2の方のご回答も参照し、ネットでもいろいろ調べましたが、 どこに、どのようにこの構文を記述してよいかがわかりません。 薄学で、申し訳ありませんが、もう少しヒントをいただけないでしょうか? 本当に申し訳ありませんが、よろしくお願い申し上げます。

全文を見る
すると、全ての回答が全文表示されます。
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2
全文を見る
すると、全ての回答が全文表示されます。
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>このダイアログを、指定した時間で、自動で消えるようにできるのでしょうか? ご希望の事は不可能です。 どうしてもと言うなら、ユーザーフォームを作成して、タイマー処理でクローズするような物を自分で作るしかありません。

ein-zwei
質問者

補足

そうなんですね orz 「ユーザーフォームを作成して、タイマー処理でクローズするような物」 とのことですが、「ユーザーフォーム」はわかったのですが、 「タイマー処理」の記述がわかればご教授いただけませんでしょうか? 申し訳ありませんが、ご教授いただけましたら、よろしくお願い申し上げます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel VBA ブックが閉じれない

    Excel2016を使用してVBAを使用しています。 VBA初心者ですが、よろしくお願いします。 質問内容は以下になります。 EXCEL起動と同時にUserFormを表示させ、UserForm上のコマンドボタンから ダイアログボックスを表示し、他ブックを開く処理なのですが、 他ブックを開くまでは問題ないのですが、他ブックが閉じれない状態になります。 Private Sub Workbook_Open() UserForm1.Show End Sub Private Sub UserForm_Initialize()  各種処理 End Sub Private Sub CommandButton1_Click() Dim OpenFileName As String SetCurrentDirectory (Worksheets(1).Cells(11, 3)) OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") Workbooks.Open OpenFileName End Sub UserFormを閉じると開いたブックも閉じることが可能です。 タスクマネージャーから強制的に終了しようとすると、以下メッセージが出ます。 ”開いているダイアログボックスがあるため、Microsoft Excel を終了できません。[OK]をクリックしてから、Microsoft Excelに切り替えてダイアログを閉じて下さい。" UserFormを閉じないで他ブックを閉じるには、どうすれば宜しいでしょうか。 申し訳ございませんがご教授下さい、よろしくお願いいたします。

  • エクセルVBAで「はい」「いいえ」のないメッセージを表示する方法

    エクセル95およびエクセル97を使用しています。 エクセルVBAでメッセージを表示する場合、通常は、 Sub メッセージ() MsgBox "~メッセージ本文~", vbOKOnly + vbinformatoin, "メッセージタイトル" End Sub のように書くと思います。他にも、vbOKCancel、 vbYesNo などもあります。 しかしこれらはいづれにせよ、ユーザーがメッセージに表示された「はい」や「いいえ」をクリックしないと先に進みません。、このメッセージから「はい」「いいえ」等の表示を無くし、メッセージを何秒か表示したら、あとは自動的に消えるようにするにはどうすればいいのでしょうか?

  • Sub Auto_Open() 実行されない

    Excel2003VBAについて教えてください。 あるBookから、VBAの”Workbooks.Open”で別のブックを開くように作ってあるのですが、開かれるBookのほうに”Sub Auto_Open()”で特定のシートをアクティブにするように作っています。 普通にBookを開くとSub Auto_Open()は実行されますが、”Workbooks.Open”では実行されません。 ”Workbooks.Open”で開いたときに、特定のシートがアクティブになればそれでよいのですが。 よろしくお願いします。

  • Excel VBA Auto_Openについて質問です。

    Excel VBA Auto_Openについて質問です。 A.xls Sub Auto_Open() Application.OnKey "{RETURN}", "ENTER_Key" Application.OnKey "{ENTER}", "ENTER_Key" End Sub でENTERキーでセルを任意の場所に動かしたいと考えています。 ENTER_Key()でうまく動かす事は出来たのですが、Auto_Openが止まらず、Excelを落とさずに、違うファイル(B.xls)を開いてA.xlsをクローズしてもB.xlsでENTERを押すと、エラー1004となってしまいます。 個人的にはAuto_Openが動いてしまっている感じがします。 エラーがでるので同コードをWorkbook_open()に移したのですが、今度は「マクロが使用できないか、無効になっている・・・」の画面になります。 原因や対策、またはENTERキーでセルを任意の場所に動かす方法等のアドバイスよろしくお願いします。 ちなみに、セル動きは1回目は1行下がり、2回目は右に4つ移動です。 このルーチンは出来ていると思います。 それではよろしくお願いいたします。 m(_ _)m

  • VBA  Auto_Openについて

    いつもお世話になってます。 Private Sub メイン() Load メイン メイン.Show End Sub Private Sub Auto_Open() Worksheets("sheets1").Range("A1").Value = Time Application.OnTime Now + TimeValue("0:00:01"), "Auto_Open" End Sub こんなかんじのを書きました。 上の「メイン」フォームもAuto_Openさせたいのですが どうしたらいいのでしょうか? 時刻は常に作動させておきたいです。 よろしくお願いします。

  • エクセルVBAでオートシェイプの属性を取得する方法を教えてください。

    お世話になります。VBAについてほとんど理解していないので、ピントはずれな質問かも知れませんがよろしくお願いします。 エクセルのシートに四角形のオートシェイプが10個ほどあります。このなかの、1つを選択して色やパターンなどの属性を取得するのに次のように書いてみました。 Sub test() MsgBox Selection.ShapeRange.Fill.ForeColor.SchemeColor MsgBox Selection.ShapeRange.Fill.Patterned End Sub 1行目の色についてはメッセージボックスに表示されるのですが、パターンが表示されません。 パターンの属性を取得する方法を教えてください。 エクセルのバージョンは:EXCEL2002です。 よろしくお願いします。

  • エクセル VBA

    先日初めてVBAに触れた者です 知恵をお貸しください エクセルのバージョンは2000です ブックのデータを誰も編集できないようにして、 尚且つオートフィルタだけを有効にする方法を探しています。 この条件だけならば、 Sub Auto_Open() Worksheets("Sheet1").EnableAutoFilter = True Worksheets("Sheet1").Protect UserInterfaceOnly:=True End Sub で、可能になったのですが あとこのシートに「パスワード保護」をかけることは 出来るでしょうか? 私には「出来る」か「出来ないか」すらわからないです。 お手数をおかけして申し訳ないですが どうぞお助けくださいませ。 よろしくお願いします

  • 初心者です。エクセルVBAの質問なのですが・・・

    エクセルのVBAで 例えば・・・IF関数を使いたい時に Public Sub 練習() 年齢 = InputBox("あなたは何歳ですか。数字だけを入力して下さい。") If 年齢 < 20 Then MsgBox "未成年ですね" ElseIf 年齢 < 30 Then MsgBox "20代ですね。" Else MsgBox "その他の年代ですね" End If End Sub                            のようなものを作って、実行をしたときに、数字を入れてOKボタンではなく、ダイアログボックスのキャンセルや閉じるボタンを押したときに、「その他の年代ですね」が出てきますが、それを出てこないようにすることはできますか?(例えば、キャンセルボタンのような役割をさせるなど・・・)  結構難しいですかね? 教えて下さい。お願いします。

  • エクセルVBA フォーム上でOnkeyがうまく出来ない

    エクセルVBAでプログラムをしています。 Application.Onkeyでショートカットを指定したいのですがフォーム上ではうまく指定できません。 フォーム上での指定は不可能なんでしょうか? ショートカットを認識するケース 標準モジュールに Sub test2() MsgBox "test2" End Sub Sub Auto_Open() Application.OnKey "{b}", "test2" End Sub としてシート上で「b」を押した場合はうまくいきます。 ショートカットを認識しないケース 標準モジュールに Sub test() MsgBox "test" End Sub UserForm1フォームに Private Sub UserForm_Initialize() Application.OnKey "{a}", "test" End Sub としてフォームをロード(表示)して「a」を押しても何もおきません。 またフォームが表示されている状態で「b」を押しても何もおきません。 上記のコードはテストで作ったものなのでこれ以外はフォームを開く文以外何も書いておりませんので他との兼ね合いではないと思います。 どうすれば思ったとおりの動作になるのでしょうか? そもそもOnkeyはユーザフォームがアクティブのときは動かないのでしょうか? 動かない場合、フォームがアクティブなときのみフォームごとに違う関数を呼ぶショートカットを作る方法はありませんでしょうか? (コントロールごとにkey_downイベントで確認する方法はコントロールの数が各100個ほどあるのと、フォームが10個以上あるため出来ればやりたくありません。) 環境はwinXP、excel2003です。 よろしくお願いいたします。

  • Excel VBA 違うxlsファイルの指定したシートを開く処理

    Excel VBAで違うExcelファイルの指定したシートを開きたいのですが、 うまくいきません。現在のコードは、 *フォーム* Private Sub CB1_Click() Dim A As Integer A = MsgBox("データ展開する?", 4, "データ展開?") If A = 6 Then INPORT.FILE_OPEN1 End If End Sub *INPORTモジュール* Sub FILE_OPEN1()  FILE_OPEN8 End Sub Sub FILE_OPEN8() Dim fnames As String fnames = fnames1 Workbooks.Open Filename:=fnames ***ここでしょうか?.Sheet("")と指定しても出来ません*** End Sub Function fnames1() As Variant fnames1 = Application.GetOpenFilename( _ Title:="ファイルを開く", _ FILEFILTER:="エクセルファイル (*.xls), *.xls") If fnames1 = False Then MsgBox ("ファイルを開けませんでした。" & Chr$(13) & _ "もう一度やり直して下さい。") End End If End Function また、指定する事が出来たら、選択したシートを現在のブックにコピーもしたいのですが、どの様にすればよいでしょうか? よろしくお願いします。

エアプリンタが見つかりません
このQ&Aのポイント
  • iPhoneから印刷しようとするとエアプリンタが見つかりませんと表示される。先日までは問題なくプリントできていた。
  • 関係があるとするとジェイコムのモデムの調子が悪く新しい機械に取り換えた。その後プリンタには新しいWiFiの設定をし、本体にも表示されている。
  • お使いの環境はiPhone12miniで、無線WiFiに接続されています。電話回線はジェイコムです。
回答を見る

専門家に質問してみよう