gpt4 book ai didi

excel - 如何在 ADODB SELECT 期间捕获 Escape 键(Excel VBA)

转载 作者:行者123 更新时间:2023-12-03 07:42:59 26 4
gpt4 key购买 nike

我在 Excel 中有一些 VBA 代码,用于设置 ADODB 连接并使用 rst.Open 对 Access 数据库运行 SELECT 查询(其中 rstADODB.RecordSet )。这一切都很好。我在代码中的几乎每个例程中都有一些标准的错误处理,而且一切正常,通过调用 MsgBox 优雅地处理错误等等。

我的问题是,如果用户在 SELECT 期间按下 ESCAPE(即在执行 rst.Open 时),则 Excel/VBA 似乎为 。完全忽略错误处理和显示标准Code execution has been interruptedContinue/End/Debug/Help按钮,就好像根本没有错误处理一样。好像要确认这一点,如果我在此错误对话框中单击“调试”,它会直接将我发送到 行之后 rst.Open线(像往常一样以黄色突出显示);如果我然后转到 VBE 即时窗口并输入 print Err.number它返回零——即没有错误——而不是我所期望的标准错误 18。

请注意,程序开始执行时首先要做的事情之一是Application.EnableCancelKey = xlErrorHandler。 ,但是,加上 On Error Goto ErrHandler在这个套路中,似乎完全被忽视了。

我尝试过的其他事情:

  • 使用 Application.OnKey "{ESC}","" 禁用 ESC 键并使用 Application.OnKey "{ESC}" 恢复它紧接着rst.Open -- 当用户按下 ESCAPE 然后 Debug 突出显示的是第二行!
  • 使用 Application.Interactive = False就在 rst.Open 之前然后直接恢复。
  • 该代码是从用户窗体调用的,我尝试插入 Userform_KeyDown并寻找 vbKeyEscape .

  • 这些都不起作用。这几乎就像 rst.Open在 Excel VBA 环境“外部”运行,并且在“ADODB”环境中按下 ESCAPE,ADODB 向 Excel 报告出现中断。

    有人可以帮忙吗?我不一定要阻止用户中断 SELECT(因为这可能是不明智的!),但我希望能够优雅地处理中断,而不需要标准的丑陋消息,让他们有机会进入 VBA。

    我认为向您展示代码无济于事,但无论如何:
    Private Sub RunSelectQuery(ByRef rst As ADODB.Recordset, _
    ByVal strSql As String, ByRef cnn As ADODB.Connection)
    Dim booEof As Boolean

    On Error GoTo ErrHandler

    rst.Open strSql, cnn, adOpenForwardOnly, adLockReadOnly

    booEof = rst.EOF

    ErrHandler: ' -- Error handling and Routine termination.
    If Err.Number <> 0 Then If DspErr() Then Stop: Resume Else End
    End Sub

    正如我所说,如果用户在 rst.Open 语句期间没有按 ESCAPE,则此方法非常有效;如果他们确实按了 ESCAPE,则会出现丑陋的错误消息,当您单击 Debug 时,它会突出显示 booEof = 行.顺便说一句,那一行可以是任何东西——我在那里插入了其他行,调试按钮总是将我带到 rst.Open 下面的下一个可执行行。线。

    与 Office Professional Plus 2016、Windows 10 一起运行。

    最佳答案

    微博:

    The EnableCancelKey property is always reset to xlInterrupt whenever Microsoft Excel returns to the idle state and there's no code running. To trap or disable cancellation in your procedure, you must explicitly change the EnableCancelKey property every time the procedure is called.

    关于excel - 如何在 ADODB SELECT 期间捕获 Escape 键(Excel VBA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53043423/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com