CAD设计论坛

 找回密码
 立即注册
论坛新手常用操作帮助系统等待验证的用户请看获取社区币方法的说明新注册会员必读(必修)
查看: 1745|回复: 2

[求助] 高手请进来看看这段 VBA代码

[复制链接]
发表于 2007-6-3 19:35 | 显示全部楼层 |阅读模式
这段代码 我找到时 说明是可以将AUTOCAD中的属性块中的属性提取到Excel中
) P) x0 V% H( S4 f我用的是AUTOCAD2007 打开VBA复制进去 然后工具-引用,把Microsoft  Excel勾选上
1 r2 A8 ]- U/ y( E& y然后编译   光标停留在“mspace As Object”这句上
- N" p1 w! C) P: _编译报错  “成员已经存在于本对象模块派生出的对象模块中”( B# D8 k" A8 O. M& k# c& d8 [: S% |
然后小弟查了很久 也不知道 对不对 把mspace改成了myspace! }# Y! w- d& y4 [" @# R! F
再编译就没有报错 通过了& A" w9 Y3 [6 ~
但是运行宏的时候 又报错“运行时错误429,ActiveX部件不能创建对象”6 Y" U. S: N0 |+ G
请各位帮忙看一下 或者 高手可以指点一下小弟
4 R( c& }; G0 ~! j$ v! p感激万分
: L! f& j: i' C7 I% H' z
3 I% m9 m" U5 f$ Y$ L% O; L  h: o; i5 B$ W9 o; Y" a
Public acad As Object! q( _$ ]$ J- h2 `; n
Public mspace As Object6 z0 D% x! T/ b: L/ A; T# ~+ _4 f
Public excel As Object4 X. ]' f+ ~% e: u. Y( M  V( f
Public AcadRunning As Integer3 C, |4 x2 N- R
Public excelSheet As Object, }7 E8 n' _4 U9 {
Sub Extract()
! c0 [% Q+ l4 [$ \3 R    Dim sheet As Object
& e, @- D8 @4 \5 w    Dim shapes As Object/ X, Z( s" p6 |0 H
    Dim elem As Object  i. K/ U% @; B' m6 s4 Y
    Dim excel As Object
$ W# _/ A2 Q4 }$ u% r0 |7 U( X    Dim Max As Integer. }) i6 @( S% a$ c2 f. t
    Dim Min As Integer$ u; U7 ~% o2 I1 G7 j
    Dim NoOfIndices As Integer( S( u2 `( f* e, r& u* |
    Dim excelSheet As Object
: m" S$ a: D7 Q, P3 b    Dim RowNum As Integer, w0 f# T+ s. O
    Dim Array1 As Variant, Array2 As Variant% h! s7 D. U$ R8 p5 @0 P
    Dim Count As Integer
) r2 p& J) {/ i: \$ c% e) i+ T, K! c  z- \+ S5 n, g

% x1 ?7 q  B, H$ F& u/ c
7 I# Q, V3 Y+ p5 _) \: D  r    Set excel = GetObject(, "Excel.Application")5 }) F' q& N% p
Set excelSheet = excel.Worksheets("sheet1")2 J( x7 D2 S7 N' C) n
     Dim Sh As Object, rngStart As Range
9 p$ K$ b: f) A8 u& _( @     If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub! c" [5 Z; L/ h% a/ |8 c; v3 B
     Set Sh1 = ExcelSheet1. @9 Y4 R8 Z0 r( w3 T2 `2 q0 I) J
Set rngStart = Sh1.Range("A1")
8 U# R2 H, x) A0 b: R2 [    With rngStart.Rows(1)0 \% h1 j& }  S8 ^
End With
% ~+ D; u) N# ?1 Q# d- m  N    Set acad = Nothing1 E7 }% R. V  h  T
    On Error Resume Next! I, @5 K: ~  L6 f
    Set acad = GetObject(, "AutoCAD.Application")
, D; m, P! D# R: u9 c    If Err <> 0 Then
  l; ]% u7 @5 V3 s* j    Set acad = CreateObject("AutoCAD.Application")
0 @  l9 K: k6 R( g- p    MsgBox "请打开 AutoCAD 图形文件!"
4 u5 e1 t" r( b5 h- h* w+ C5 G    Exit Sub6 n6 {8 M# f: }7 L3 S
    End If
+ l, Y6 v' G  h  l" L6 b5 D' }6 @
    Set doc = acad.ActiveDocument6 X" R2 n( o. M' M) c
    Set mspace = doc.ModelSpace9 C4 h: r  r. b+ a2 o
    RowNum = 19 T/ m% N; [, o0 l- R3 Z
    Dim Header As Boolean
8 |( J6 K% |$ y+ R6 r) m    Header = False
1 u* v5 ]+ z4 T6 j$ y; a# i+ a    For Each elem In mspace( j' o' r7 @" t: _' q+ {/ j9 P
      With elem5 N+ ^( _0 w: M+ }2 E
        If StrComp(.EntityName, "AcDbBlockReference", 1) = 0 Then& I  l# g" K  B/ I/ h! B
           If .HasAttributes Then* S: v$ x: W9 k' _6 @- c7 \, G' I
              Array1 = .GetAttributes$ g9 e# _: |1 {' o
              Array2 = .GetConstantAttributes
" v2 Y2 F" I4 |* |& R- O8 ~            For Count = LBound(Array1) To UBound(Array1): Q& @& L' D/ O# q( A4 r
               If Header = False Then; p" H+ o7 t+ f7 m" G- z3 Y
                 If StrComp(Array1(Count).EntityName, "AcDbAttribute", 1) = 0 Then2 C5 X8 Q3 \* b; l+ P0 k# \
                  excelSheet.Cells(RowNum, Count + 1).Value = Array1(Count).TagString: k7 |, q- k; O+ t4 v0 N! H4 X' B. O
                 End If1 E4 ?6 |6 x) x0 Z! c/ @! |4 A
               End If$ R- _6 e! C+ m% y9 W2 t2 k% L
            Next Count% n1 E! t. T$ N7 ~: x, {7 T1 h( o0 Q
            9 V- ?+ s4 F! G& d) l
            For Count = LBound(Array2) To UBound(Array2)
9 c; y* V* k% S2 I9 V               If Header = False Then' h! _; A- _. ]- N' r
                 If StrComp(Array2(Count).EntityName, "AcDbAttributeDefinition", 1) = 0 Then; M6 s* g- n- ~- B, Z: r
                  excelSheet.Cells(RowNum, UBound(Array1) + 1 + Count + 1).Value = Array2(Count).TagString7 w* r" \% X1 B( p( r" H, v
                 End If- [0 V& H+ A# X9 W# l4 Y2 ~8 H
               End If( B5 X' o8 n4 [. n+ J
            Next Count
" E- y' r9 h& t            9 m1 f- B4 ?$ `# ]6 B
              RowNum = RowNum + 1
8 v' W3 ~( ?( ?- m  o! X" c            For Count = LBound(Array1) To UBound(Array1). a% H- c, I! f! j- H$ X
               excelSheet.Cells(RowNum, Count + 1).Value = Array1(Count).TextString# y& k" L' C4 J! o/ n, H: c7 ~
            Next Count% |6 V* m! @- t5 J3 E4 L
            
' E- _8 \: d' k, K/ k/ {; f$ z/ c            For Count = LBound(Array2) To UBound(Array2)
) t9 A3 x+ a: @* p+ h% ~               excelSheet.Cells(RowNum, UBound(Array1) + 1 + Count + 1).Value = Array2(Count).TextString
2 r5 x9 o" \+ }( S            Next Count
* L9 o( u- a) t            
5 ~. b% M( M: ^+ _! R            Header = True, `, e- I; B- |$ Z& ?9 T! B
            End If
  R0 a; b, D; i# e  |          End If
4 ]9 g& @9 X6 h6 g9 Q4 P      End With
5 j6 t' X+ m) L) m- i& ]6 T4 q    Next elem
- P& E  _  z" n. T- z8 y    NumberOfAttributes = RowNum - 1
$ F+ F( _- B& M) Y    If NumberOfAttributes > 0 Then
2 }$ N2 w9 C8 r+ O. X      Worksheets("属性取出").Range("A1").Sort _
6 a7 {. L, l# c, K6 j0 G      key1:=Worksheets("属性取出").Columns("A"), _
2 M% ~1 x& F' ?. z; o% H4 S9 f( t      Header:=xlGuess
' ~- \  _7 D8 \5 S' b! D    Else1 z' I- v7 z9 u/ v, k
      MsgBox "无法提出图形文件中的属性或此图形文件中无任何属性!": Q9 {2 S* t- u3 l
    End If
: g6 `8 y! \+ E& S' `. L' x   
2 x' d2 ]* A% p5 ?6 P5 r# P    Set currentcell = Range("A2")' l1 x9 e( F" O
    Do While Not IsEmpty(currentcell)
$ M+ u" H& ~; J8 C  m        Set nextCell = currentcell.Offset(1, 0)
) I6 m! e) p, z% z; T+ H        If nextCell.Value = currentcell.Value Then5 ]& i) T% [( ]# I8 A: b! ?# Q. m: T7 f
            Set TCell = currentcell.Offset(1, 3)2 ^3 y9 C) m2 K; F
            TCell.Value = TCell.Value + 1
& X# N  e" a( e. j; L) [; d            currentcell.EntireRow.Delete
9 w- z- {5 J& w& @! M" H+ W7 r3 Q        End If0 o& {$ y/ F1 h8 y& {
        Set currentcell = nextCell) l& X8 X7 M- @
    Loop
) m/ \. o( P. I$ n1 c% ?" G6 ]0 w. h" w3 B6 f1 f! @
    . j- e& w, x1 u" B7 @4 I( e
    Set acad = Nothing! y# ^9 u" ~, O) d* j
End Sub
发表于 2007-6-3 21:28 | 显示全部楼层
发表于 2007-6-4 20:46 | 显示全部楼层
这个真的难说的2 q( h4 m0 t3 @5 o- ?0 P
想当年用EXCEL宏的时候也经常出错
- a7 F# a( A: ~& t# u& d自己慢慢的去调试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于|免责|隐私|版权|广告|联系|手机版|CAD设计论坛

GMT+8, 2026-8-14 15:53

CAD设计论坛,为工程师增加动力。

© 2005-2026 askcad.com. All rights reserved.

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