CAD设计论坛

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

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

[复制链接]
发表于 2007-6-3 19:35 | 显示全部楼层 |阅读模式
这段代码 我找到时 说明是可以将AUTOCAD中的属性块中的属性提取到Excel中
! L6 Y/ `5 k$ K3 {' c/ t我用的是AUTOCAD2007 打开VBA复制进去 然后工具-引用,把Microsoft  Excel勾选上
  ~7 s, R, m+ [( D$ g然后编译   光标停留在“mspace As Object”这句上
1 Q- Q6 R+ M1 X8 r% p) J/ x( |编译报错  “成员已经存在于本对象模块派生出的对象模块中”$ w& V: Q0 ?9 ^9 M; {
然后小弟查了很久 也不知道 对不对 把mspace改成了myspace8 ], z. m& i, ?. |4 k5 J9 O9 N
再编译就没有报错 通过了
4 k% Y% I- ]% S+ c  ~. K3 `% ^但是运行宏的时候 又报错“运行时错误429,ActiveX部件不能创建对象”- V& c! W* [" V) Q& Y; b0 I2 u- o
请各位帮忙看一下 或者 高手可以指点一下小弟% U# m% @9 x3 I/ x. `
感激万分
; c: w8 A/ J) D+ S% r5 y2 S0 k" A1 C$ P
' ]$ m+ U8 r2 T; ^- G% ]1 h  m) I
Public acad As Object
  o$ a9 i4 i' E3 V7 R2 I+ X+ f+ tPublic mspace As Object; X5 O7 N" S( s+ t& N# r
Public excel As Object; I' Z5 c& C3 J- N0 \
Public AcadRunning As Integer
5 [; ^6 ~) {8 @% e% g8 ]Public excelSheet As Object
1 V' {, q  T8 a6 C2 R! O4 o7 MSub Extract()- p8 ]& Z2 S8 P- `9 k# i! N" D* L
    Dim sheet As Object2 Z* j0 T+ }9 [/ s; q! W
    Dim shapes As Object
+ ]: s; l, @; p2 T9 U( R    Dim elem As Object4 Y8 B5 k$ a, Z. q; r7 k0 t
    Dim excel As Object6 W* r, F. V+ @3 V- ~/ N$ H  h
    Dim Max As Integer+ B+ j' |; M. k0 p
    Dim Min As Integer. }( I: ]9 b. j
    Dim NoOfIndices As Integer  ]- y4 Z! j7 }4 y. w$ c( o
    Dim excelSheet As Object6 v: ^$ W. G  W7 o5 F1 E
    Dim RowNum As Integer
; [0 r( w- W% K6 i7 h    Dim Array1 As Variant, Array2 As Variant
) R' e' `5 N' j5 e' c" Z: v0 B    Dim Count As Integer
8 v4 y1 e- T+ s1 J  V& i" ^8 J5 f" T
6 c0 {' i0 [! W# `- U3 _/ o7 F5 i1 ^7 P- j# Y

, l6 v" c( x4 B6 E, f& ]    Set excel = GetObject(, "Excel.Application")
+ b% j- h) Z. e1 V, c4 H. bSet excelSheet = excel.Worksheets("sheet1")
7 M& i& L8 b0 G9 J* o) l     Dim Sh As Object, rngStart As Range; b) E7 j3 G# W% |9 d  c
     If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
6 d3 f4 F* R7 K* C/ K8 I% e     Set Sh1 = ExcelSheet1
' S/ F- a) _9 s) P6 Q0 \Set rngStart = Sh1.Range("A1")
" ?3 W  r6 k9 q7 H- k0 s    With rngStart.Rows(1): Q, s0 N0 z& T' g
End With) k& a8 H2 N' A, n( |
    Set acad = Nothing+ i% C% v' B! H" F$ M0 E0 v
    On Error Resume Next8 i' c0 B# S, O" A: c5 I
    Set acad = GetObject(, "AutoCAD.Application")
4 I/ d  _- Z# [9 M2 L1 j    If Err <> 0 Then
0 w5 K/ h6 H6 Q5 a/ x& u    Set acad = CreateObject("AutoCAD.Application")( r# r- X: |/ ~/ o, M9 y% S
    MsgBox "请打开 AutoCAD 图形文件!"
7 p% L0 H4 a( ~/ N    Exit Sub% |) A5 O# \! Z( K7 T
    End If
! e$ v$ H; W3 [/ X3 u8 |$ h: p7 F  N5 G3 Z3 F" v
    Set doc = acad.ActiveDocument6 R& [. ^$ C" S% S
    Set mspace = doc.ModelSpace
( ^" [  x" E( @, Y. _0 M    RowNum = 1
& a* a7 q1 a0 Y    Dim Header As Boolean
) y2 Q$ ?5 i3 \: M( h    Header = False+ A4 Z0 f3 ^* n1 p1 s" e  j
    For Each elem In mspace& Y, T" `4 y+ {. T9 r& J* S
      With elem
6 y5 ~7 f# |9 O* X        If StrComp(.EntityName, "AcDbBlockReference", 1) = 0 Then0 K$ T$ S' W  I# J1 e' d" ?
           If .HasAttributes Then( S0 D/ q3 {7 K
              Array1 = .GetAttributes7 W! Y- o- f1 u; \# N
              Array2 = .GetConstantAttributes
& m+ C# `5 T! l% }            For Count = LBound(Array1) To UBound(Array1)( z& ?% i' W7 u7 P6 P
               If Header = False Then+ y) i- d+ v8 S" [
                 If StrComp(Array1(Count).EntityName, "AcDbAttribute", 1) = 0 Then
3 M" A# p- d! N! O# M) w& `3 I                  excelSheet.Cells(RowNum, Count + 1).Value = Array1(Count).TagString$ O: j# c5 [! Z+ S3 \. \
                 End If
$ w- H$ Z: G" u" L4 ]$ s2 B               End If
9 d% N, K! J- W0 U2 c: p: [! ^            Next Count/ |) f! `4 j% Z8 _2 Q
            ) l( e$ k2 j2 i
            For Count = LBound(Array2) To UBound(Array2)3 m/ M, [) I4 x
               If Header = False Then2 A6 E* u2 N6 p) g" l
                 If StrComp(Array2(Count).EntityName, "AcDbAttributeDefinition", 1) = 0 Then) [1 Y6 ~. ]9 a9 f
                  excelSheet.Cells(RowNum, UBound(Array1) + 1 + Count + 1).Value = Array2(Count).TagString
( o' M! Q! X5 s! P) v                 End If8 J/ U) n/ r! T; A) Y8 i
               End If
" P9 B/ J: J4 m            Next Count
, a2 C% y: s7 n5 _: r( T            ! z: h' Q% }5 F5 S6 S
              RowNum = RowNum + 1+ P' |3 P! U$ e* l/ \
            For Count = LBound(Array1) To UBound(Array1)
6 u  K% O$ [6 |5 _* m               excelSheet.Cells(RowNum, Count + 1).Value = Array1(Count).TextString
! S: B- g) D5 t" h! z/ x/ H            Next Count: B: M- Z) _) R( k; w
            / m0 T) z; C* S- Z: q
            For Count = LBound(Array2) To UBound(Array2)! }( B; w. `$ `1 ]0 Z
               excelSheet.Cells(RowNum, UBound(Array1) + 1 + Count + 1).Value = Array2(Count).TextString
) i. ^  a  ~; @8 U            Next Count
2 u; c- p& p1 C, z; l            ! @# b% v9 ~. y8 z' @+ a
            Header = True
8 N* N0 i5 t0 Z) c6 A            End If
) |4 O6 u  a: ~2 w( g% X. M          End If
# M8 Z! m" n0 X% i* ?, d      End With  E* E6 k( P2 n+ ?5 l. }" d( n
    Next elem5 x- U6 Q7 M- s0 N" V) F4 }
    NumberOfAttributes = RowNum - 1
  ?3 W" [6 B! b' a  Q, J    If NumberOfAttributes > 0 Then% _7 S: z3 L: ~
      Worksheets("属性取出").Range("A1").Sort _. }- x& f; }1 g5 X+ F( Y9 |
      key1:=Worksheets("属性取出").Columns("A"), _& x3 K! M) G, A  M4 v  A# }( @
      Header:=xlGuess6 O! H+ {; s' E* B0 }  t
    Else& O$ d: r! @; G/ ?
      MsgBox "无法提出图形文件中的属性或此图形文件中无任何属性!"' w9 T( C; j; C; w& O) h, K. j
    End If5 \$ Y0 u3 X( I9 f9 C, s2 v) r* C
    ! y+ N7 P. a% J# m3 b# Y; o
    Set currentcell = Range("A2")
# d6 v2 p/ g5 I3 {  c' s; N3 X    Do While Not IsEmpty(currentcell)2 i  E. \2 G- J. n- `9 ~( i
        Set nextCell = currentcell.Offset(1, 0)+ b  O, H9 V9 B% t) }/ W
        If nextCell.Value = currentcell.Value Then
& H0 y9 j9 v" r* H            Set TCell = currentcell.Offset(1, 3)
/ }& V1 M, Z5 X& d            TCell.Value = TCell.Value + 15 f% e2 R5 b4 L! y
            currentcell.EntireRow.Delete
/ b4 U8 R; F9 \% a6 C        End If: w% w6 q3 ]' Q* f0 v
        Set currentcell = nextCell: [, k. J" I' M) G2 I
    Loop
  }4 T0 ]3 V- k) V
( k" M# \! Q! `( D    4 j9 F0 ^$ b- F7 K' h/ ?7 H
    Set acad = Nothing
7 `5 b: `7 h6 R! _0 G8 v, s0 A: SEnd Sub
发表于 2007-6-3 21:28 | 显示全部楼层
发表于 2007-6-4 20:46 | 显示全部楼层
这个真的难说的
9 u0 e% t9 [. j1 k0 ?想当年用EXCEL宏的时候也经常出错
$ z  A% ~" ]. b/ j自己慢慢的去调试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-7-16 13:30

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

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

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