CAD设计论坛

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

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

[复制链接]
发表于 2007-6-3 19:35 | 显示全部楼层 |阅读模式
这段代码 我找到时 说明是可以将AUTOCAD中的属性块中的属性提取到Excel中- s4 z! R: u9 }6 K
我用的是AUTOCAD2007 打开VBA复制进去 然后工具-引用,把Microsoft  Excel勾选上
4 [8 x- X$ ?2 N  v7 G然后编译   光标停留在“mspace As Object”这句上
' m7 j& X; t/ t5 M编译报错  “成员已经存在于本对象模块派生出的对象模块中”
5 W! m+ ?5 [' |8 q1 |% V+ [然后小弟查了很久 也不知道 对不对 把mspace改成了myspace1 C. }( `6 z  Q/ U5 n, f
再编译就没有报错 通过了
' S7 x9 ^" D, f0 v. w) _但是运行宏的时候 又报错“运行时错误429,ActiveX部件不能创建对象”
$ A5 s. p$ l9 c* V. M请各位帮忙看一下 或者 高手可以指点一下小弟
" T' }6 c2 W6 o$ U. g' n感激万分2 o- {+ G0 H1 e' B/ b% k
$ e4 p/ B5 @" v

( K# S1 K4 k1 o$ Z8 [Public acad As Object
9 f& a+ i. X8 oPublic mspace As Object
7 t# _+ V; H$ o, l' u, h3 n; oPublic excel As Object
7 ]( T2 e; C3 j" a* n% v" r, UPublic AcadRunning As Integer
# e% s5 F, V- V2 r7 UPublic excelSheet As Object1 K4 z7 d. d+ x- A. v3 f
Sub Extract()8 J# _/ u% T+ Y7 F. Y6 [
    Dim sheet As Object. l9 P& M+ s3 c+ {8 U
    Dim shapes As Object
5 e6 ~( f; P- F$ T    Dim elem As Object
* p7 @' K4 m# I+ P# P' A- B7 Y    Dim excel As Object
& U$ w% m  D( ]% f    Dim Max As Integer
. w, q5 P. y4 s$ l* z% z1 H' b    Dim Min As Integer
3 e' w+ @! T. K* L, T7 ?, m    Dim NoOfIndices As Integer
# S9 B, D) ^4 H5 \) m& l    Dim excelSheet As Object. d7 x+ ~3 a5 z
    Dim RowNum As Integer
: b9 e( r. L+ Y* o& {4 ?- k2 t    Dim Array1 As Variant, Array2 As Variant
8 U5 m( \; [1 ~" e    Dim Count As Integer
3 p  e" c" L( {# u
! ^  g7 G0 l- V. ~' M: P, [. n: i" u9 U
$ H* z' B" b1 C  R
    Set excel = GetObject(, "Excel.Application"), ^6 V5 O3 z- v( p2 V
Set excelSheet = excel.Worksheets("sheet1")
' o9 @. t- X" Y5 Y3 _: d     Dim Sh As Object, rngStart As Range% D2 `+ B- Q! T% ~0 N8 q1 P3 k
     If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
0 b5 a  D) b/ R' o     Set Sh1 = ExcelSheet1
1 w: O6 K. o# I' |- BSet rngStart = Sh1.Range("A1")- \7 O' `0 I3 a% L0 p
    With rngStart.Rows(1)6 h2 m' n9 t7 s2 H) K
End With
+ B2 L1 \! |( y3 ~8 r    Set acad = Nothing5 w1 C  p9 Y+ [/ r
    On Error Resume Next7 H9 \; t, v4 ]+ k; b
    Set acad = GetObject(, "AutoCAD.Application")( `9 X; a- Q2 G( J" p* Y) C) X
    If Err <> 0 Then
! f0 h0 v3 O( i9 ]$ u2 c) d7 ?    Set acad = CreateObject("AutoCAD.Application")* y3 E! J% r1 i+ ?8 L- x- ~
    MsgBox "请打开 AutoCAD 图形文件!"
: t* _8 w6 _: N( R3 d* M: ?+ k    Exit Sub1 X* z2 A9 @4 w" N. L) U' t
    End If- @% h! Q* i9 J2 B. Z) V$ ]' q# H

- Y) V( `1 H3 v8 c    Set doc = acad.ActiveDocument% v$ U0 N: G) U
    Set mspace = doc.ModelSpace
/ `3 P! H2 \9 y0 T) M' q    RowNum = 1# `6 U* H, z1 ~4 s5 |
    Dim Header As Boolean6 h$ f- f: j8 J' g) B$ f* p
    Header = False
' S" Z/ f. b0 f) j& s    For Each elem In mspace) {. }8 }& U  S. T+ T% V
      With elem
. s$ [* c  I: p, v/ c. u        If StrComp(.EntityName, "AcDbBlockReference", 1) = 0 Then: Z+ n; ?% p* Z
           If .HasAttributes Then
8 G- [0 m  A& o" E              Array1 = .GetAttributes
: |0 l8 L; a8 p4 ~+ z1 D5 o              Array2 = .GetConstantAttributes' v, y% r( e/ ?5 }
            For Count = LBound(Array1) To UBound(Array1)
: {8 T5 `# E# \* M               If Header = False Then2 T, `" ], K' E+ y. B3 Q
                 If StrComp(Array1(Count).EntityName, "AcDbAttribute", 1) = 0 Then6 G2 C1 L! _0 W+ j+ S: g
                  excelSheet.Cells(RowNum, Count + 1).Value = Array1(Count).TagString
9 E* a& Q  k0 f* v" q9 O* E$ x, h$ |3 H                 End If
9 d8 J+ O/ e. ?) X- q$ g               End If
5 s" K/ _9 X# d* r5 U            Next Count! g! D/ W9 u3 }$ e" Y6 W# g, j
            
; F7 K, a7 N6 u5 |            For Count = LBound(Array2) To UBound(Array2)
* R# M1 Z' ]& ]- g) G               If Header = False Then
) e' M1 V: ^# o( l! E                 If StrComp(Array2(Count).EntityName, "AcDbAttributeDefinition", 1) = 0 Then( j# J$ X, L" e) i6 ]* ^% f- T
                  excelSheet.Cells(RowNum, UBound(Array1) + 1 + Count + 1).Value = Array2(Count).TagString
( S2 e. r, E  w6 w$ U                 End If
, T/ s# B6 J0 Z* a5 h: J) `               End If+ G4 L: I  {, c6 O; A
            Next Count  n0 s/ k- U7 B3 Z
            
: t8 j( h* R, _1 ?              RowNum = RowNum + 1
- ~; }4 s4 ?4 ?            For Count = LBound(Array1) To UBound(Array1): v  o6 [8 `6 A3 H$ o( I! j
               excelSheet.Cells(RowNum, Count + 1).Value = Array1(Count).TextString
/ W9 ]) C& S" W( X. ^2 i            Next Count5 |, n- }4 K& w7 l# H4 \
            : k7 y, |( R& A3 Q3 d5 z! [
            For Count = LBound(Array2) To UBound(Array2)
, R: L3 `+ H/ m; I8 N$ K! b% g2 L* ^# {               excelSheet.Cells(RowNum, UBound(Array1) + 1 + Count + 1).Value = Array2(Count).TextString/ A& D3 P1 ]$ N2 _
            Next Count3 b4 p$ p1 @- M( u7 X, s/ M
            
7 R% d6 K) ~" P/ M/ y, U( _            Header = True
4 C  h/ K! [$ ?, B7 A            End If
6 X: X9 e& ~" ^! h7 w1 E$ @" B          End If
6 M; ~/ F$ k$ r# [# V9 G1 ~( @- D" g      End With
) p6 y& j" b5 u$ p    Next elem& v/ i+ I: [2 s: M! H' C+ b/ z  ~
    NumberOfAttributes = RowNum - 1
- f+ _: p" v( s7 @8 T    If NumberOfAttributes > 0 Then
! r9 }! g4 \+ F* d1 j+ D$ Y3 |  T5 u      Worksheets("属性取出").Range("A1").Sort _: [. [; P' [, |
      key1:=Worksheets("属性取出").Columns("A"), _* w& d) }# L& f, N/ Z0 t3 L
      Header:=xlGuess
/ a1 t8 H  k& H4 O2 y1 I    Else
8 [1 k( |% ]4 v5 O      MsgBox "无法提出图形文件中的属性或此图形文件中无任何属性!", M2 H8 ?' ]+ R5 ^
    End If) F3 Q1 H6 e3 h+ |4 J  \
   
2 E! b' S6 q+ u8 z+ B# k" h) I; e, {    Set currentcell = Range("A2")9 z9 m. |# u- w
    Do While Not IsEmpty(currentcell)
& i! l2 m% V5 Z        Set nextCell = currentcell.Offset(1, 0)
: ~  O2 P) U; r( O" P        If nextCell.Value = currentcell.Value Then4 O6 h* D+ P' K! a
            Set TCell = currentcell.Offset(1, 3)/ I. e+ B: d' g: @
            TCell.Value = TCell.Value + 1
* A2 F* Y- ]+ B% E/ R: m            currentcell.EntireRow.Delete+ N. Q! `! d  j7 b5 Q
        End If
8 R4 y5 o5 Y4 |) j4 p2 {        Set currentcell = nextCell
; K/ h0 B8 Q$ H8 B! W2 l    Loop% S0 E8 e% g8 c$ m/ \8 J

& v7 p: C; x2 d+ |, `$ a   
! Z: m/ `. o& y3 m! {    Set acad = Nothing- ]% l6 h& G8 ~7 R' l1 A
End Sub
发表于 2007-6-3 21:28 | 显示全部楼层
发表于 2007-6-4 20:46 | 显示全部楼层
这个真的难说的
3 Z( ^" P7 w* h4 k5 |; p4 V想当年用EXCEL宏的时候也经常出错; N& U  S' ]. f( E4 k4 F* s5 n+ q
自己慢慢的去调试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-11-25 03:51

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

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

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