Excel 在消息框运行时滚动

Excel 在消息框运行时滚动,excel,vba,Excel,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,但也有类似于

我使用以下宏向用户显示消息框:

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
的东西吗?

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

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

还有其他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)
If ModelessMsgBox(prompt:="MsgBox!!!!", buttons:=vbYesNo) = vbYes Then
    'do smth
Else
    'do smth else
End If
但是,此MsgBox会停止代码执行(当无模式窗体不执行时,会使您使用另一个全局/静态变量垃圾集和/或抑制事件以控制执行流),因此它可以这样使用:

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

更多

还有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)
If ModelessMsgBox(prompt:="MsgBox!!!!", buttons:=vbYesNo) = vbYes Then
    'do smth
Else
    'do smth else
End If
但是,此MsgBox会停止代码执行(当无模式窗体不执行时,会使您使用另一个全局/静态变量垃圾集和/或抑制事件以控制执行流),因此它可以这样使用:

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