在消息框运行时滚动

时间:2017-03-29 11:27:07

标签: excel excel-vba vba

我有以下宏来向用户显示一个消息框:

Sub Messageboxtest()
Test = MsgBox("Do you want to continue", vbYesNo)
If Answer = vbYes Then
Sheets(1).Range("A2").Value = 1
Else
End If
End Sub

宏本身运作完美。但是,一旦excel屏幕上显示消息框,用户就无法再在Excel文件中向下滚动。

对于输入框,我知道有Application.InputBox函数,但是还有类似Application.MessageBox的内容吗?

2 个答案:

答案 0 :(得分:2)

没有application.MessageBox函数只是MsgBox,但您可以创建一个看起来像MsgBox的表单并将ShowModal属性设置为False

答案 1 :(得分:0)

有API替代方案!在模块顶部声明此函数:

#If VBA7 Then
    Public Declare PtrSafe Function ModelessMsgBox Lib "User32" Alias "MessageBoxA" (Optional ByVal hWnd As Long, _
            Optional ByVal prompt As String, _
            Optional ByVal title As String, _
            Optional ByVal buttons As Long) As Long
#Else
    Public Declare Function ModelessMsgBox Lib "User32" Alias "MessageBoxA" (Optional ByVal hWnd As Long, _
            Optional ByVal prompt As String, _
            Optional ByVal title As String, _
            Optional ByVal buttons As Long) As Long
#End If

并像这样使用它:

Call ModelessMsgBox(prompt:="MsgBox!!!!", buttons:=vbYesNo)

然而,这个MsgBox会停止代码执行(当无模式窗体不执行时,让你使用另一个全局/静态变量的垃圾集和/或只是为了控制执行流来抑制事件),所以它可以像这样使用:

If ModelessMsgBox(prompt:="MsgBox!!!!", buttons:=vbYesNo) = vbYes Then
    'do smth
Else
    'do smth else
End If

更多here