- UID
- 399443
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2006-2-22
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
代码说明:这段小代码我是写在vbaide的模块中的,想实现在vbaide界面点F5后可以进入CAD,点一个有长度属性的obj(假定点直线),然后点一个文字,把直线的长度值(小数点后保留3位)赋值给这个text,并且可以循环多次直到按esc键
问题: 在loop 后添加
Until Checkkey(vk_escape) = True 后只执行一次就跳出循环了,不要这个语句又跳不出循环
请帮忙指正一下,卡在这儿不知道怎么做了 谢谢了
附代码如下:
Public Const vk_escape = &H1B
Public Declare Function Getasynckeystate Lib "user32" (ByVal vkey As Long) As Integer
Public Function Checkkey(lngkey As Long) As Boolean
If Getasynckeystate(lngkey) Then
Checkkey = True
Else
Checkkey = False
End If
End Function
Sub CHANGDU()
Dim Sourceobj As AcadObject '有长度属性的obj
Dim Basepnt As Variant
Dim Destobj As AcadText '文字
Dim value1 As Single '长度值
Dim Value2 As Single '长度值 保留位数之后的
Dim Objselected As Integer '循环需要
Dim unit As Long
Dim ws As Integer '需要保留的小数点后位数
On Error Resume Next
Objselected = 1
Do '进入循环
Retry:
ThisDrawing.Utility.GetEntity Sourceobj, Basepnt, "选择线(有长度属性的,圆弧则应该转换成多段线后在用本程序)"
'选择有长度属性的obj 主要是直线或则多段线
If Sourceobj Is Nothing Then '如果没有选择则重新选则
GoTo Retry
Else
End If
ws = 3
unit = acDecimal
value1 = Sourceobj.Length
Value2 = ThisDrawing.Utility.RealToString(value1, unit, ws) '保留3位有效小数位
Gettext:
ThisDrawing.Utility.GetEntity Destobj, Basepnt, "选择文字"
If Destobj Is Nothing Then '如果没有选择则重新选则
GoTo Gettext
Else
End If
Destobj.TextString = Value2
Loop Until Checkkey(vk_escape) = True '问题语句 位置*-*3
ExitSub:
End Sub |
|