CAD设计论坛

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

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

[复制链接]
发表于 2007-6-3 19:35 | 显示全部楼层 |阅读模式
这段代码 我找到时 说明是可以将AUTOCAD中的属性块中的属性提取到Excel中* m" ^- ^9 p9 c8 D* y* N! P
我用的是AUTOCAD2007 打开VBA复制进去 然后工具-引用,把Microsoft  Excel勾选上
6 A* T7 t, ?& [$ D8 R然后编译   光标停留在“mspace As Object”这句上
8 o5 Y- B- d$ y% T5 D; F; o" s编译报错  “成员已经存在于本对象模块派生出的对象模块中”" j0 M  U6 X" t8 h
然后小弟查了很久 也不知道 对不对 把mspace改成了myspace8 X; J9 u  ^% f9 Z9 d4 q
再编译就没有报错 通过了
& y7 ?0 ^, X/ T; G! K但是运行宏的时候 又报错“运行时错误429,ActiveX部件不能创建对象”6 J5 i* g; d5 ~% D9 M( e" ^
请各位帮忙看一下 或者 高手可以指点一下小弟5 V3 n# l2 `  P! |  j
感激万分
% T0 B0 q: u3 {, G* U- M/ u5 K% m) M, v. d5 [" J) b
" [6 T$ C) D  w% G
Public acad As Object
, }5 ?( {5 E% M+ hPublic mspace As Object
* B, F2 ?" }( y  L, ]  S& i; MPublic excel As Object- Z% D0 {* K) |9 U
Public AcadRunning As Integer8 _. i  O3 d% }7 e6 I% ~5 C
Public excelSheet As Object& g6 J: I; x: s- e
Sub Extract()
2 y/ Z  ^( z( x* m1 e    Dim sheet As Object5 g( I$ z5 X0 I4 ?2 d. L* g5 h
    Dim shapes As Object& k; \$ p  w8 I8 [& U; R  I  k
    Dim elem As Object
% z% w8 _! U8 b+ d. N    Dim excel As Object
% E% v5 w  k+ z' {' J( D7 H    Dim Max As Integer
0 i% y& Z& o6 w" @    Dim Min As Integer
/ |+ C! V& _& ]+ U9 ]# r( D5 W    Dim NoOfIndices As Integer
# e/ V7 g8 Q1 k: G    Dim excelSheet As Object2 O; P: Y/ S$ ]" o% ?1 Q6 j
    Dim RowNum As Integer) w4 x: B$ e, p: n/ A0 F; G
    Dim Array1 As Variant, Array2 As Variant
. `( T5 P  Q8 c/ P    Dim Count As Integer
, w9 R! z" Y9 E# T: ~6 M1 o/ w2 `# C6 y  v& G' x; E) E! t* @

( \/ p& l1 R( e+ v1 `1 z' D+ I" T$ |3 s! d  p
    Set excel = GetObject(, "Excel.Application")
1 p+ g: `* E) O% w/ mSet excelSheet = excel.Worksheets("sheet1")- u; x8 g& e& e" k7 U! T. x# ~9 _
     Dim Sh As Object, rngStart As Range
- C" c( j) L: }2 C: S" h     If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub9 m% S  H( h* N* h
     Set Sh1 = ExcelSheet1
. I, T5 D) U5 FSet rngStart = Sh1.Range("A1")
3 U8 V3 e4 A7 j0 U; H7 P    With rngStart.Rows(1)
( @+ ]* N& b3 R7 |6 r( o2 qEnd With
. o# c6 v4 g8 d3 H4 `3 z' |: O5 [+ R    Set acad = Nothing
  t$ H, ~' T4 N" O3 \' x' C& J    On Error Resume Next
- J. j% `7 J6 R    Set acad = GetObject(, "AutoCAD.Application")
9 l7 E) g+ T# j+ v8 o0 H    If Err <> 0 Then
- ]; S( B/ K: h% E0 v$ I    Set acad = CreateObject("AutoCAD.Application")
( I7 {/ q( B+ k; O( R% z% r    MsgBox "请打开 AutoCAD 图形文件!"
* k/ {" q# p! Z0 x! |    Exit Sub
& J4 b, i" o  S, r0 {5 ^    End If
0 E6 P( G# _( V5 [0 a/ v- n
2 N5 O  S( w% n' ^; Q' y3 ~$ y    Set doc = acad.ActiveDocument4 _/ c5 p. t6 U2 Y* z3 K
    Set mspace = doc.ModelSpace
+ t! t# h& I  z6 W7 ?* b) Z: _    RowNum = 1
. ^. k& D3 F- x    Dim Header As Boolean: Z- q* t# C: x% U3 X% C
    Header = False
" I4 q2 a0 S# m! n* Q    For Each elem In mspace6 p, y9 s& l/ m9 ]0 k- N
      With elem& P, E) h1 X. C6 x
        If StrComp(.EntityName, "AcDbBlockReference", 1) = 0 Then
( P  Z$ |- T# Y' {5 m           If .HasAttributes Then2 i' x( a$ ^2 |9 R, [
              Array1 = .GetAttributes7 Z+ }: f% i, {& D2 d
              Array2 = .GetConstantAttributes
: A/ J; p2 |* n: b4 ^* ^            For Count = LBound(Array1) To UBound(Array1)
# f, X7 n- b4 J0 s  D% _1 v$ f               If Header = False Then
; {* M8 Z/ V3 z% D$ l                 If StrComp(Array1(Count).EntityName, "AcDbAttribute", 1) = 0 Then8 @3 j* J. N% [/ d4 B& E3 h
                  excelSheet.Cells(RowNum, Count + 1).Value = Array1(Count).TagString- {, `) i; q( Q- s. Z  o
                 End If% x# S" F/ m. P7 q; t( l' G
               End If
, q$ M) @% l, {4 S) F            Next Count
0 y- A9 N( a# i  T0 Y            
% D/ U' Q0 ], h. X            For Count = LBound(Array2) To UBound(Array2)
# R/ a" }5 f7 P& J& `" p3 M               If Header = False Then! o/ G9 |' C( r8 G
                 If StrComp(Array2(Count).EntityName, "AcDbAttributeDefinition", 1) = 0 Then: W. M* B  A) f/ o- P; ~
                  excelSheet.Cells(RowNum, UBound(Array1) + 1 + Count + 1).Value = Array2(Count).TagString
4 M+ r/ e2 ^' X  u; w  P; B5 B7 R                 End If
: ~4 o! _) L) M8 Z$ O2 [6 i; p               End If; R- ^4 M4 b4 n) y% J: o, H) r4 b
            Next Count5 i4 A6 o& ^2 [3 p7 ^% o
            # t" z6 g' H% ^# Q2 s7 q
              RowNum = RowNum + 1
/ k/ T- x# r* J* |: ^2 \            For Count = LBound(Array1) To UBound(Array1)2 q  q4 L/ \4 D$ K# p. @! O8 [
               excelSheet.Cells(RowNum, Count + 1).Value = Array1(Count).TextString9 v6 P/ T, F: n$ W
            Next Count# U) o. x# y" L) @9 C: h! r1 D9 a
            5 `% r: ?' P6 j
            For Count = LBound(Array2) To UBound(Array2)
& L8 o. V/ f3 ]# k8 U               excelSheet.Cells(RowNum, UBound(Array1) + 1 + Count + 1).Value = Array2(Count).TextString" {5 `' [9 e  X8 |
            Next Count- i% B1 M4 n0 t: C* P. J8 V( G
            
( E7 w, ^! B- K' M. l/ P# P$ V! H            Header = True$ B1 t% @8 T: ^# @4 e# A) C9 g; I
            End If
: E4 Z: X, q: K/ S& Y9 y! J          End If* Y4 C9 p+ j7 M
      End With  B2 J( l$ g" i" J# U9 J, f
    Next elem
: c6 I% ~/ O* S/ |    NumberOfAttributes = RowNum - 18 W. a" [2 n4 e8 A# R1 x3 L
    If NumberOfAttributes > 0 Then' I' u# a) Z- l( @( X: V
      Worksheets("属性取出").Range("A1").Sort _
6 s0 J5 q5 w3 L6 F      key1:=Worksheets("属性取出").Columns("A"), _+ r0 n; d) _. }1 n6 B
      Header:=xlGuess, i1 e0 C. X0 [4 l: N
    Else
  r  H# J) H0 s      MsgBox "无法提出图形文件中的属性或此图形文件中无任何属性!"/ t3 |' H9 {0 \. E
    End If" O, h( u1 t( i5 y* G1 u/ J& E
   
$ Z# E: \- m) f1 J( O    Set currentcell = Range("A2")$ V" V7 K$ b5 l
    Do While Not IsEmpty(currentcell)
$ ?8 Q9 F6 }" h" t& j1 i        Set nextCell = currentcell.Offset(1, 0)! R2 R! w5 `5 g3 r
        If nextCell.Value = currentcell.Value Then
5 ?8 `7 d" l, w" C" K& l2 ?            Set TCell = currentcell.Offset(1, 3)% g1 V7 {) Z2 _, O1 [/ @% T$ L
            TCell.Value = TCell.Value + 1
8 k( |8 W6 R& N' _! Q* i            currentcell.EntireRow.Delete/ U4 ^, F: p3 s" f% u8 Q3 @
        End If
6 q; `4 d0 U: H* v! g        Set currentcell = nextCell
( W6 {; v. |7 j$ x7 l0 H    Loop
6 h# p) M3 A6 w; a0 S
& h0 Y9 Z5 V$ t, _    ' X* Y; F  s" {/ e5 ^
    Set acad = Nothing
0 v, O. ^  U# H- a7 e, ?  l0 J7 j. gEnd Sub
发表于 2007-6-3 21:28 | 显示全部楼层
发表于 2007-6-4 20:46 | 显示全部楼层
这个真的难说的
8 C6 m' P( D1 W# b- Q  k想当年用EXCEL宏的时候也经常出错+ i' s& b& h2 G- N) b
自己慢慢的去调试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-7-3 14:20

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

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

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