消息框正在运行时滚动

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

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 

macros本身的作品完美。 但是,一旦消息框显示在excel屏幕上,用户就不能再在Excel文件中向下滚动了。

对于input框,我知道有Application.InputBox函数,但也有像Application.MessageBox

没有application.MessageBox函数只是MsgBox,但您可以创build一个看起来像一个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) 

但是,这个MsgBox会停止代码的执行(当非模态的forms不会,使用另一个全局/静态variables的垃圾集合和/或为了控制执行stream而抑制事件),所以它可以像这样使用:

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

更多在这里