Excel实战技巧71: 自动响应消息框信息

2019-12-30 14:47:51 浏览数 (1)

下面是在vbaexpress.com论坛上看到的一个很有意思的例子。

在示例工作簿中的代码如下:

代码语言:javascript复制
Public Declare Function SetTimer& Lib "user32" (ByValhwnd&, _
    ByVal nIDEvent&,ByVal uElapse&, ByVal lpTimerFunc&)
Private Declare Function KillTimer& Lib "user32"(ByVal hwnd&, _
    ByVal nIDEvent&)
Public Const NV_INPUTBOX As Long = &H5000
 
Public Sub TimerProc(ByVal hwnd As Long, ByVal uMsg As Long, ByValidEvent As Long, ByVal dwTime As Long)
    SendKeys "%Y"
    KillTimer hwnd, idEvent
End Sub
 
Sub test()
    With Application
        .Calculation =xlCalculationManual
        .ScreenUpdating =False
    End With
 
    Dim targetworkbook AsWorkbook
 
    Dim usersave As VbMsgBoxResult
 
    Set targetworkbook =Workbooks.Open("C:test.xlsm", UpdateLinks:=0)
 
    Calculate
    targetworkbook.Activate
    SetTimer 0, NV_INPUTBOX,1000, AddressOf TimerProc
    Application.Runtargetworkbook.Name & "!tester"
 
    targetworkbook.Activate
 
    With Application
        .Calculation =xlCalculationAutomatic
        .ScreenUpdating =True
    End With
 
End Sub

运行test过程,将打开C盘中名为test.xlsm的工作簿,并弹出如下图1所示的消息框。

图1

如果你在5秒内没有响应消息框,也就是说,没有单击“确定”按钮或者“取消”按钮,那么在5秒后会关闭该消息框并弹出“超时”消息框,如下图2所示。

图2

在工作簿test.xlsm中的代码如下:

代码语言:javascript复制
Sub tester()
    TimedMsgBox
End Sub
 
Sub TimedMsgBox()
    Dim cTime As Long
    Dim WSH As Object
 
    Set WSH =CreateObject("WScript.Shell")
    cTime = 5 '5 秒
    Select CaseWSH.Popup("打开Excel文件?!", cTime, "询问", vbOKCancel)
        Case vbOK
            MsgBox "你单击了确定"
        Case vbCancel
            MsgBox "你单击了取消"
        Case -1
            MsgBox "超时"
    End Select
End Sub

很有意思!有兴趣的话,可以试试。

欢迎分享本文,转载请注明出处。

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

com

0 人点赞