CAD VBA经常会遇到一个问题不知道如何处理。
就是我事先不知道,我需要几个点,而每个点都需要用GetPoint函数获得。如果用循环,要怎么退出。我现在都 是按Esc让取点错处,然后通过错误处理退出。但是实际画图Esc一般都是取消,觉得很怪,有没有更好的办法。比如点空格就退出(CAD2008是可以,但CAD2019就不行。)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
如果你只是取点,退出时按ESC,获取错误处理,不是很好吗? mikewolf2k 发表于 2018-11-26 09:41
ACAD VBA的交互部分比较弱,要取点就只能取点,要取按键就只能取按键,不能混合。要循环就只能通过ESC或者 ...
谢谢你给我很大的启发。 zzyong00 发表于 2018-11-25 16:34
如果你只是取点,退出时按ESC,获取错误处理,不是很好吗?
就觉得有点怪,一般esc是退出才对。 mikewolf2k 发表于 2018-11-26 09:41
ACAD VBA的交互部分比较弱,要取点就只能取点,要取按键就只能取按键,不能混合。要循环就只能通过ESC或者 ...
怎么可能有这种想法,这种想法是错误的 异常捕捉本身就是功能的一部分,人家设计就是按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
wuyunpeng888 发表于 2018-12-4 17:10
异常捕捉本身就是功能的一部分,人家设计就是按Esc产生错误,再者循环内检测按键都可以
Private Declare ...
感觉好高端,要好好学习一下。 wuyunpeng888 发表于 2018-12-4 17:10
异常捕捉本身就是功能的一部分,人家设计就是按Esc产生错误,再者循环内检测按键都可以
Private Declare ...
大神,还有一个问题我想请教一下。就是我有一个三维软件会自动生成一个excel并打开。然后我在这个三维软件里用vba想直接处理这个表格。用set xbook=xlapp.activeworkbook时一直出错。原因是我点击运行宏时excel界面就不是激活的,该如何解决。 用命名集合的方式来引用,如set xbook=xlapp.workbooks.item("名称")这种,或者遍历查找也可以
页:
[1]