下面是在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
很有意思!有兴趣的话,可以试试。
欢迎分享本文,转载请注明出处。
欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。