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
更多