我想要做的是:
Do While ctr < List and Break = False
code that works here...
DoEvents
If KeyDown = vbKeyQ
Break = True
End If
loop按住一个键(例如,Q)来打破一个循环。为了实现我想要的功能,我已经在循环期间阅读了DoEvents。这样做的想法是在到达列表的末尾或按住q之前,运行一个Do While循环。我在让代码按照我想要的方式工作时遇到了问题,所以我希望能够结束这种挫折感。我在VBA方面的经验非常有限。
UPDATE -更多的代码来暴露问题的所在。这一切都是按照我的顺序(万一subs的顺序不同):
Private Sub Form_KeyPress(KeyAscii As Integer)
Dim strChar As String
strChar = UCase(Chr(KeyAscii))
If strChar = "Q" Then
blnQuit = True
Debug.Print "Q pressed"
End If
End Sub
Private Sub Master_Report_Click()
Dim i As Integer
Dim Deptarray
blnQuit= False
If IsNull(Me.Hospital) Then
MsgBox ("Please Choose a Hospital")
Else
DoCmd.OpenForm "Report Print/Update", acNormal, , , , acDialog
If Report_choice = "Current_List" Then
Debug.Print "Create master rec report"
DoCmd.OpenReport "Master Rec Report", acViewPreview
DoCmd.RunCommand acCmdZoom100
ElseIf Report_choice = "Update_All" Then
total = (DCM_Dept.ListCount - 1)
ctr = 1
Do While ctr < (DCM_Dept.ListCount) And LoopBreak = False
Debug.Print "LoopBreak: "; LoopBreak
Debug.Print "Counter: "; ctr
DCM_Dept.Value = DCM_Dept.Column(0, ctr)
Update_Site (Me.Hospital)
ctr = ctr + 1
'DoEvents
' If vbKeyQ = True Then
'LoopBreak = True
'End If
Loop
Debug.Print "Update loop exited"
Debug.Print "Create master rec report"
DoCmd.OpenReport "Master Rec Report", acViewPreview
DoCmd.RunCommand acCmdZoom100
Else
End If
End If
End Sub
Private Sub Update_Site(Site As String)
If IsNull(Me.Hospital) Then
MsgBox ("Please Choose a Hospital")
ElseIf IsNull(Me.DCM_Dept) Then
MsgBox ("Please Choose a Department")
ElseIf Site = "FORES" Then
Debug.Print "Run FORES update macro"
DoCmd.RunMacro "0 FORES Master Add/Update"
ElseIf Site = "SSIUH" Then
Debug.Print "Run SSIUH update macro"
DoCmd.RunMacro "0 SSIUH Master Add/Update"
End If
End SubReport_choice和LoopBreak都是公共变量。我最初的想法是在主窗体上浮动一个弹出式表单,以显示一个计数器(“of Y")和一个按钮,以在那里中断循环。当Update_Site()运行其宏时,我意识到表单没有响应,所以我决定按下键。
那么,从这里到哪里才能让OnKeyDown工作呢?或者,有什么更好的方法吗?
发布于 2014-10-15 23:27:43
尝试将表单的Key Preview设置为Yes,并在表单中添加变量blnQuit和键按事件,如下所示:
Private blnQuit As Boolean
'form
Private Sub Form_KeyPress(KeyAscii As Integer)
Dim strChar As String
strChar = UCase(Chr(KeyAscii))
If strChar = "Q" Then
blnQuit = True
End If
End Sub然后在您的blnQuit条件下检查Do While,如下所示:
blnQuit = False
Do While ctr < List And Not blnQuit
code that works here...
DoEvents
loophttps://stackoverflow.com/questions/26392724
复制相似问题