乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 204|回复: 9

CAD VBA经常会遇到一个问题不知道如何处理。

[复制链接]

5

主题

21

帖子

4

银币

初来乍到

Rank: 1

铜币
41
发表于 2018-11-23 18:54:00 | 显示全部楼层 |阅读模式
就是我事先不知道,我需要几个点,而每个点都需要用GetPoint函数获得。如果用循环,要怎么退出。我现在都 是按Esc让取点错处,然后通过错误处理退出。但是实际画图Esc一般都是取消,觉得很怪,有没有更好的办法。比如点空格就退出(CAD2008是可以,但CAD2019就不行。)
回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2018-11-26 09:41:00 | 显示全部楼层
ACAD VBA的交互部分比较弱,要取点就只能取点,要取按键就只能取按键,不能混合。要循环就只能通过ESC或者右键等来产生错误来退出了。
回到你的问题,如果左键选点,想右键退出的话,可以试试右键后产生的错误代码是多少,然后处理。以下我的取数值的代码供参考,可以输入一个数值,可以右键选择默认的数值,可以ESC退出。
    Err.Clear
    AddValue = ActiveDocument.Utility.GetReal(vbLf & "请输入要增加的数值(右键选择" & AddValue + ssetObj.Count & ",ESC退出):")
    Select Case Err.Number
           Case -2147467259, -2145320928 '右键
                AddValue = AddValue + ssetObj.Count
           Case -2147352567  'ESC
                GoTo ExitSub
           Case Else
    End Select
回复

使用道具 举报

23

主题

561

帖子

13

银币

中流砥柱

Rank: 25

铜币
653
发表于 2018-11-25 16:34:00 | 显示全部楼层
如果你只是取点,退出时按ESC,获取错误处理,不是很好吗?
回复

使用道具 举报

5

主题

21

帖子

4

银币

初来乍到

Rank: 1

铜币
41
发表于 2018-11-26 20:36:00 | 显示全部楼层

谢谢你给我很大的启发。
回复

使用道具 举报

5

主题

21

帖子

4

银币

初来乍到

Rank: 1

铜币
41
发表于 2018-11-26 20:36:00 | 显示全部楼层

就觉得有点怪,一般esc是退出才对。
回复

使用道具 举报

3

主题

103

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2018-12-4 17:04:00 | 显示全部楼层

怎么可能有这种想法,这种想法是错误的
回复

使用道具 举报

3

主题

103

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2018-12-4 17:10:00 | 显示全部楼层
异常捕捉本身就是功能的一部分,人家设计就是按Esc产生错误,再者循环内检测按键都可以
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Public Const VK_ESCAPE = &H1B
Public Const VK_LBUTTON = &H1
Public Const VK_RBUTTON = &H2
Public Const VK_SPACE = &H20
Public Const PI As Double = 3.14159265358979
Public Function CheckKey(lngKey As Long) As Boolean
If GetAsyncKeyState(lngKey) Then
    CheckKey = True
Else
    CheckKey = False
End If
End Function
用时是这样的
Call CheckKey(VK_ESCAPE)  '消除上一次命令按的取消键
Do Until m_Enabled = False
    str = VLF.Item("cursor").funcall()
    If CheckKey(VK_ESCAPE) = True Then
        RaiseEvent Move(KeyBoard, vbKeyEscape, p)
        Exit Sub
    End If
    temp = Split(str, " ")
    If UBound(temp) > 1 Then
        p(0) = Val(temp(1))
        p(1) = Val(temp(2))
        p(2) = Val(temp(3))
    End If
    RaiseEvent Move(temp(0), temp(1), p)
Loop
回复

使用道具 举报

5

主题

21

帖子

4

银币

初来乍到

Rank: 1

铜币
41
发表于 2018-12-5 23:40:00 | 显示全部楼层

感觉好高端,要好好学习一下。
回复

使用道具 举报

5

主题

21

帖子

4

银币

初来乍到

Rank: 1

铜币
41
发表于 2018-12-8 23:21:00 | 显示全部楼层

大神,还有一个问题我想请教一下。就是我有一个三维软件会自动生成一个excel并打开。然后我在这个三维软件里用vba想直接处理这个表格。用set xbook=xlapp.activeworkbook时一直出错。原因是我点击运行宏时excel界面就不是激活的,该如何解决。
回复

使用道具 举报

3

主题

103

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
115
发表于 2019-1-12 09:52:00 | 显示全部楼层
用命名集合的方式来引用,如set xbook=xlapp.workbooks.item("名称")这种,或者遍历查找也可以
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 05:58 , Processed in 0.247998 second(s), 83 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表