|
|
回复 #7 truezx 的帖子
下面是附件中的代码: N4 w4 Z% G8 J2 c. v# k: k
- Private Sub AcadDocument_ObjectModified(ByVal Object As Object) '在thisdrawing对象的代码模块声明一个事件过程,当文档被修改时执行其中的代码4 s( D) d; n7 K5 q* R7 b
- Dim S As AcadSelectionSet, T As Object, P As AcadLWPolyline
- H8 c: B3 ]; m. ?4 O - If Object.Handle = "2D67C" Then '当被修改的对象为指定的动态块中的正方形时执行下面的代码。"2D67C"是本文档中该正方形的句柄
d/ ~5 O# s1 D+ n) l" ? - Set S = ThisDrawing.SelectionSets.Add("SS") '新建选择集并选择屏幕上所有对象
. a1 @; r4 ?* }0 q8 U - S.Select acSelectionSetAll
5 A3 m2 v4 X, Z5 E" q7 m; v - For Each T In S '遍历选择集7 ]; e3 b. }) J4 E7 }! N. E
- If T.Handle = "2D4EC" Then '找到指定的CAD表格时执行下面的代码。"2D4EC"是本文档中该表格的句柄3 R2 b# F% `9 v& B) u& b3 _& w" u
- Set P = Object
- N3 U6 Q0 I5 ~ - T.SetText 1, 0, P.Coordinates(1) * 2 '在表格第二行(索引值1)第一列(索引值0)写入正方形边长。正方形边长为左上角Y坐标值乘以2* c# ^1 J3 W4 M" Y5 N1 z5 _4 u
- Exit For '退出遍历循环5 b# A2 S: P& U+ \7 S( E
- End If/ |' X' f7 D$ t& z4 F
- Next9 w5 o, C& @5 {
- S.Delete '删除用过的选择集: q6 K5 E$ X* A7 d# r* u5 A
- End If4 E1 t* w$ t" w7 `) ^' O$ w
- End Sub
复制代码
0 b+ L' |- B' D W这个程序是简陋的,只有基本的功能,用于提示用VBA解决楼主问题的可行的途径。4 r# C$ o8 o* J6 B9 Z( t* P
程序中动态块与表格的关联关系是固定的,仅限于指定的文档中现存的对象。如果是编制一个实用程序,则代码中应该有设置关联关系的内容。另外,为了追求代码简单,程序中使用了文档层事件,这是一种低效率的做法,会明显影响到CAD的响应速度。+ ?4 K1 h6 E% z: A, \
楼上在编辑动态块后表格不再响应,是因为对图形界面现有动态块参照的更新,实质上是CAD用新参照代替了旧的参照。也就是说,在更新块参照后,原先的、包含句柄为"2D67C"的正方形的动态块参照已被CAD删除了,而由CAD插入的新参照在图形界面缩放时,这个简陋的程序并不知道这个参照是用来代替原先的参照的,所以代码的核心部分并未被执行。 |
|