プロが教えるわが家の防犯対策術!

お世話になります。
Accessで作成しています。VBAで教えてください。

①vbaで処理を実行→②処理中ですのメッセージボックス→③(処理が終わったら)メッセージを削除
という動きをさせたいのですが、どのようにすれば、③で自動的に削除できるでしょうか?

ネットでみたら、5秒後に削除など、時間を置いての削除はあるのですが、
VBA側から削除する処理の方法がわからない状況です。

よろしくお願いします。

A 回答 (3件)

#2の回答者です。


メッセージボックスのMsgBox(MessageBox)は、ユーザーの反応を求めているものだから、その使用中はすべて停止してしまうので、不可能でした。プロセスを別にするにしても、命令をアクセス等からなされたら、それは、アクセスを停止させてしまうことが分かりました。おまけに、Modalモードになってしまいます。あえて、UserForm ではなく、ダミーをHTAで作ってみました。
ダミーではあっても、OKボタンにVBScipt マクロを組み込むことは可能です。

//BUTTON1.HTA//
'---------------------------------------------------
<html>
<head>
<title>DynamicMsgBox</title>
<HTA:APPLICATION
APPLICATIONNAME="DynamicMsgBox"
ID="DynamicMsgBox"
SCROLL="no"
SCROLLFLAT="no"
BORDER="dialog"
VERSION="1.0"/>
</head>
<script language="VBScript">
Sub Window_OnLoad
Dim width,height
width=150
height=150
self.ResizeTo width,height
self.MoveTo (screen.AvailWidth-width)/3,(screen.AvailHeight-height)/2
End Sub
Sub OnClickButtonOK()
Window.Close
End Sub
</script>
<body bgcolor="buttonface">
<table border=0 width=100% height=100%>
<font size="3">  処 理 中</font>
<tr>
<td align="center">
<input type="button" style="width: 80px" name="OK" id="OK" value="OK" onclick="OnClickButtonOK">
</td>
</tr>
</table>
</body>
</html>

'------------------------------

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Const WM_QUIT = &H10

Sub StartMacro()
'実行マクロ
Dim HTAfile As String
Dim ID As Long
HTAfile = Application.DefaultFilePath & "\BUTTON1.HTA"
ID = Shell("mshta.exe " & HTAfile, vbNormalFocus)
Application.OnTime Now + TimeSerial(0, 0, 10), "Hta_Close"
End Sub

Sub Hta_Close()
'終了用
Dim hwnd As Long
Dim ret As Long
  hwnd = FindWindow("HTML Application Host Window Class", vbNullString)
  ret = SendMessage(hwnd, WM_QUIT, 0, 0&)
End Sub
    • good
    • 0
この回答へのお礼

お手数をお掛けしまして、申し訳ございませんでした。

「簡単にはできない」ことがわかったので、満足です。

ありがとうございます。

お礼日時:2018/04/26 13:54

あくまでも、メッセージボックスでこだわってみました。



'//
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 dlliseconds As Long) As Long

Sub Test1()
Dim ret As VbMsgBoxResult
 ret = MessageBoxTimeoutA(0&, "処理中です。5秒後に消えます!", "messagebox", vbMsgBoxSetForeground + vbOKCancel, 0, 5000)
  If ret = vbCancel Then
   MsgBox "Cancel が押されました。"
  End If
End Sub
    • good
    • 0
この回答へのお礼

ご連絡ありがとうございます。
何秒後ではなく、意図的に消去するコマンドを送りたいのです。
よろしくお願い申し上げます。

お礼日時:2018/04/24 19:56

メッセージボックスではなくフォームを使えば簡単にできますよ。


既にフォームを使っているのでしたら、フォーム上にテキストボックス等を置いてVisibleを操作するとか。
    • good
    • 0
この回答へのお礼

ご連絡ありがとうございます。
メッセージボックスに意図的に消去するコマンドを送りたいのです。
よろしくお願い申し上げます。

お礼日時:2018/04/24 19:56

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

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


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