grado 发表于 2009-6-23 00:54:00

一个简单问题,VBA如何实现按ESC键退出循环?

<p>设计了一个简单的VBA程序,用Do Loop循环从CAD上截取数据输出到EXCEL表格。现在程序已经能用了,就是不知道怎么样用ESC键终止,结果每次都弄成了无限次数的循环。请问应该怎么样实现这个简单的功能呢?</p><p>最好设计为“按回车键继续录入,按ESC键终止”</p><p>CAD编程的资料不好找,不像EXCEL程序网上到处都是。烦请各位高手了!非常感谢</p>

xjjq2008 发表于 2016-10-19 19:01:46

天之雨露 发表于 2009-6-23 05:28
DoEvents能实现你要的功能,具体参见以下网址,灵活运用http://www.cnblogs.com/todd/archive/2006/05/10/3 ...

处理按下Esc键
      If objSelect Is Nothing Then
                If CheckKey(&H1B) = True Then
                  Exit Sub
                Else
                  do something
                End If
            End If

月牙湾 发表于 2016-10-19 22:07:40

加个 if,判断一下esc就可以了。

天之雨露 发表于 2009-6-23 05:28:00

<p>DoEvents能实现你要的功能,具体参见以下网址,灵活运用</p><p><a href="http://www.cnblogs.com/todd/archive/2006/05/10/396095.html">http://www.cnblogs.com/todd/archive/2006/05/10/396095.html</a></p>

mycad 发表于 2009-6-23 09:19:00

<p>在end sub 上面一行输入扑捉错误的行标志,如 </p><p>sub XX()</p><p></p><p>on error goto flag:</p><p>这里是你的源代码。</p><p></p><p>flag:</p><p>msgbox "你按了ESC键。"</p><p>end sub</p>

grado 发表于 2009-6-23 12:20:00

<p>谢谢楼上的兄弟,不过我的代码里面已经用过了on error resume next语句</p><p>有没有捕捉键盘输入的语句呢?</p>

mccad 发表于 2009-6-23 21:51:00

<a href="http://bbs.mjtd.com/forum.php?mod=viewthread&tid=70901">http://bbs.mjtd.com/forum.php?mod=viewthread&tid=70901</a>

grado 发表于 2009-6-23 22:14:00

mycad发表于2009-6-23 9:19:00static/image/common/back.gif在end sub 上面一行输入扑捉错误的行标志,如 sub XX()on error goto flag:这里是你的源代码。flag:msgbox \"你按了ESC键。\"end sub

<p></p><p>这个办法我试过了可以用!谢谢</p><p>但我觉得这个方法不够完美,不止是按下ESC键会使程序退出,就是按下回车键、空格键也会退出。</p><p>更麻烦的是,我的Do Loop 循环里面有从CAD屏幕选择对象的语句,如果不小心点到了屏幕上空白处,也会导致程序退出。有没有更好的方法呢?</p><p>或者说,在屏幕选择的语句里,设置成为“如果不小心点到了屏幕的空白处,则提示用户重新选择一次,而不是直接转到 on error goto flag ”</p><p></p>

zzyong00 发表于 2009-6-24 17:45:00

<p>Option Explicit<br/>'取得键盘上每个虚拟键当前的状态<br/>Private Declare Function GetKeyboardState Lib "user32" _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (pbKeyState As Byte) As Long<br/>'根据指定的映射类型,执行不同的扫描码和字符转换<br/>Private Declare Function MapVirtualKey Lib "user32" _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Alias "MapVirtualKeyA" (ByVal wCode As Long, _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ByVal wMapType As Long) As Long<br/>Private Sub Command1_Click()<br/>&nbsp;&nbsp;&nbsp; Dim i&nbsp;&nbsp;&nbsp;&nbsp; As Integer<br/>&nbsp;&nbsp;&nbsp; Dim Key(0 To 255)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; As Byte<br/>&nbsp;&nbsp;&nbsp; Dim KeyCode&nbsp;&nbsp;&nbsp;&nbsp; As Long<br/>&nbsp;&nbsp;&nbsp; Do<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DoEvents<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dl&amp; = GetKeyboardState(Key(0))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '获取当前按键状态<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For i = 0 To 254<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Key(i) And &amp;H80 Then&nbsp;&nbsp;&nbsp; '如某个键当时按下,则位7为1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; KeyCode&amp; = MapVirtualKey(i, 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If KeyCode = 1 Then Exit Do<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp; Loop<br/>&nbsp;&nbsp;&nbsp; MsgBox 1<br/>End Sub</p>

znyan 发表于 2010-1-21 21:55:00

if err.number=-2147352567 then exit do

AirCD 发表于 2010-1-26 15:03:00

可以判断虚拟键盘状态

yg545france 发表于 2010-2-6 20:02:00

还有别的好办法吗
页: [1] 2
查看完整版本: 一个简单问题,VBA如何实现按ESC键退出循环?