首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MS Access,DoEvents退出循环

MS Access,DoEvents退出循环
EN

Stack Overflow用户
提问于 2014-10-15 21:50:07
回答 1查看 2K关注 0票数 2

我想要做的是:

代码语言:javascript
复制
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的顺序不同):

代码语言:javascript
复制
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 Sub

Report_choice和LoopBreak都是公共变量。我最初的想法是在主窗体上浮动一个弹出式表单,以显示一个计数器(“of Y")和一个按钮,以在那里中断循环。当Update_Site()运行其宏时,我意识到表单没有响应,所以我决定按下键。

那么,从这里到哪里才能让OnKeyDown工作呢?或者,有什么更好的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-15 23:27:43

尝试将表单的Key Preview设置为Yes,并在表单中添加变量blnQuit和键按事件,如下所示:

代码语言:javascript
复制
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,如下所示:

代码语言:javascript
复制
blnQuit = False
Do While ctr < List And Not blnQuit
   code that works here...
   DoEvents
loop
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26392724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档