我如何使用VBA来确定代码是否处于中断模式

时间:2015-11-09 11:13:24

标签: vba access-vba

为什么?

我对MyControl的关注如下:

If IsNull(Me.MyControl.Value) Then

     Me.MyControl.Value = "FREDDY"
     SendKeys "{F2}"

End If

这很好用并将光标放在文本FREDDY的末尾,以便用户轻松添加到文本中。

但是,如果我在sendkeys行上设置了一个断点,并且“跳过”,则在设计环境中打开Object explorer。 (即F2发布到设计环境!)

我在其他地方遇到过这个问题。

如果处于调试模式,如何停止执行sendkeys行?

请注意

screen.ActiveForm.Name

总是返回活动表单的名称,即使代码窗口“具有焦点”。

非常感谢帮助。

3 个答案:

答案 0 :(得分:3)

在其中一个模块代码表的顶部声明一个公共布尔值。

Public GLOBAL_RUNTIME_MODE as Boolean   'initialized as False
'optionally set it right here when you've stopped debugging.
'GLOBAL_RUNTIME_MODE = True

您希望避免在调试会话期间运行代码的任何地方,将全局布尔值包装到代码行周围的条件语句中。

Me.MyControl.Value = "FREDDY"
If GLOBAL_RUNTIME_MODE  Then
    SendKeys "{F2}"
End If

在完成调试后,在单个位置更改公共变量以影响所有条件。

GLOBAL_RUNTIME_MODE = True

答案 1 :(得分:2)

如果没有别的办法,

SendKeys应该是最后的手段。因为你正在经历的副作用。

更好的方法是更改​​.SelStart属性:

With Me.MyControl
    .Value = "FREDDY"
    .SelStart = .SelLength
End With

取消选择文本并将光标放在最后。

答案 2 :(得分:1)

我认为VBA无法发现这一点。

一般建议(按此顺序):

  1. 避免(如果可能)在调试时产生问题的命令 - 请参阅其他答案。
  2. 明智地设置断点(或Stop命令) - 有问题的行之后,或之前和之后,以及"运行" (F5)而不是单步执行。
  3. 如果您在调试时发现下一行可能无法正常工作,请使用右键单击 - > Set Next Statement跳过该行。