明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 10299|回复: 17

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

  [复制链接]
发表于 2009-6-23 00:54 | 显示全部楼层 |阅读模式

设计了一个简单的VBA程序,用Do Loop循环从CAD上截取数据输出到EXCEL表格。现在程序已经能用了,就是不知道怎么样用ESC键终止,结果每次都弄成了无限次数的循环。请问应该怎么样实现这个简单的功能呢?

最好设计为“按回车键继续录入,按ESC键终止”

CAD编程的资料不好找,不像EXCEL程序网上到处都是。烦请各位高手了!非常感谢

发表于 2016-10-19 19:01 | 显示全部楼层
天之雨露 发表于 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 | 显示全部楼层
加个 if,判断一下esc就可以了。
发表于 2009-6-23 05:28 | 显示全部楼层

DoEvents能实现你要的功能,具体参见以下网址,灵活运用

http://www.cnblogs.com/todd/archive/2006/05/10/396095.html

发表于 2009-6-23 09:19 | 显示全部楼层

在end sub 上面一行输入扑捉错误的行标志,如

sub XX()

on error goto flag:

这里是你的源代码。

flag:

msgbox "你按了ESC键。"

end sub

 楼主| 发表于 2009-6-23 12:20 | 显示全部楼层

谢谢楼上的兄弟,不过我的代码里面已经用过了on error resume next语句

有没有捕捉键盘输入的语句呢?

发表于 2009-6-23 21:51 | 显示全部楼层
 楼主| 发表于 2009-6-23 22:14 | 显示全部楼层
mycad发表于2009-6-23 9:19:00在end sub 上面一行输入扑捉错误的行标志,如 sub XX()on error goto flag:这里是你的源代码。flag:msgbox \"你按了ESC键。\"end sub

这个办法我试过了可以用!谢谢

但我觉得这个方法不够完美,不止是按下ESC键会使程序退出,就是按下回车键、空格键也会退出。

更麻烦的是,我的Do Loop 循环里面有从CAD屏幕选择对象的语句,如果不小心点到了屏幕上空白处,也会导致程序退出。有没有更好的方法呢?

或者说,在屏幕选择的语句里,设置成为“如果不小心点到了屏幕的空白处,则提示用户重新选择一次,而不是直接转到 on error goto flag ”

发表于 2009-6-24 17:45 | 显示全部楼层

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

发表于 2010-1-21 21:55 | 显示全部楼层
if err.number=-2147352567 then exit do
发表于 2010-1-26 15:03 | 显示全部楼层
可以判断虚拟键盘状态
发表于 2010-2-6 20:02 | 显示全部楼层
还有别的好办法吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-25 08:37 , Processed in 0.737548 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表