CAD设计论坛

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

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

[复制链接]
发表于 2007-6-3 19:35 | 显示全部楼层 |阅读模式
这段代码 我找到时 说明是可以将AUTOCAD中的属性块中的属性提取到Excel中8 K5 |) W9 y5 d6 T
我用的是AUTOCAD2007 打开VBA复制进去 然后工具-引用,把Microsoft  Excel勾选上" q" x- y! V. I' G; j% O
然后编译   光标停留在“mspace As Object”这句上
$ q% J; j. _9 k7 x编译报错  “成员已经存在于本对象模块派生出的对象模块中”( k2 U. W# L  U, l
然后小弟查了很久 也不知道 对不对 把mspace改成了myspace" ~: n1 K' _, J9 \" t- O1 `
再编译就没有报错 通过了5 P" g8 v6 q9 D4 t. K+ Y! b. z
但是运行宏的时候 又报错“运行时错误429,ActiveX部件不能创建对象”% C0 p: v  q  ?
请各位帮忙看一下 或者 高手可以指点一下小弟
, s! v; f  f. H$ G; u' I感激万分" n# A8 i* |$ ]4 e0 w6 |; ]
9 ?8 f6 `- b1 j
9 p* C8 \5 m& v# M- Y' [
Public acad As Object8 F1 B. `( o2 ]8 ~7 l" j7 x% E" g
Public mspace As Object
% J8 L. ^( u" G# ZPublic excel As Object
0 e7 ]  \4 T* W% ?* i+ S3 tPublic AcadRunning As Integer
) \, [+ d% N- n6 Q* P3 `: t9 a" d' d; _Public excelSheet As Object/ |; X9 ?/ A. n+ `# x# C
Sub Extract()% l. Y" s! ]  B! v
    Dim sheet As Object
4 U" b" `( L$ G! r. C+ u0 Z    Dim shapes As Object
7 T, c2 K' r4 M1 x    Dim elem As Object
" e9 L* u4 Z. e" g    Dim excel As Object, i. ?  q$ b) q- M
    Dim Max As Integer
9 W$ o, t3 m; [, Q    Dim Min As Integer
( x9 q8 P/ U& [  ]- a1 r    Dim NoOfIndices As Integer* y" x! `: C0 I/ d- B; \/ g; E& i
    Dim excelSheet As Object2 Z5 P7 V7 |& o
    Dim RowNum As Integer
. j6 V! s! M* J    Dim Array1 As Variant, Array2 As Variant! R; v/ [3 Y# \4 V# m3 m! ^
    Dim Count As Integer
" s' C+ |$ P- Y7 w7 |
5 X1 s% X! e6 m8 x8 }3 }& C+ P8 X$ N" D" G

# R7 K: {" {% S: Q2 |1 N  g; k& ~    Set excel = GetObject(, "Excel.Application")' ?: w" {0 H9 s
Set excelSheet = excel.Worksheets("sheet1")0 s+ a' F7 J" I( U2 q
     Dim Sh As Object, rngStart As Range+ c& v% \; ?: A: V" t  p: }7 j
     If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
7 o5 n7 i4 p! F, ^     Set Sh1 = ExcelSheet1
0 k# \8 {6 ~$ Y! K4 r7 bSet rngStart = Sh1.Range("A1")
) m2 `0 {& Q3 u/ W    With rngStart.Rows(1)1 U' j7 n( |* w& H& S) k
End With- `* J. w+ G7 n4 T- C& w
    Set acad = Nothing
4 X- e# i; u. ~; j5 n  y    On Error Resume Next
& q6 l8 k' k; O    Set acad = GetObject(, "AutoCAD.Application")
0 _4 @( X" B9 D% k7 ^& g9 X( s    If Err <> 0 Then
, s. X3 {( c1 p/ i# q    Set acad = CreateObject("AutoCAD.Application")( j+ u7 c( l. o7 s7 @# v) R
    MsgBox "请打开 AutoCAD 图形文件!"
5 t$ q2 e; |/ S) o- |- F4 @: P    Exit Sub4 t: j( H: N; d5 h7 c2 W5 P& Q
    End If
7 s7 q, A" k' p: Q! K6 E$ C% ^! D; ?. l# Z: |) [. m5 ~
    Set doc = acad.ActiveDocument
2 [; D2 a. H3 d2 ?; `    Set mspace = doc.ModelSpace; d3 O% p& I/ X  I8 i) @
    RowNum = 1; g$ I1 q1 a% b7 C, y  i
    Dim Header As Boolean) K2 w3 p2 m/ v- O3 t: z# d: G
    Header = False
3 v& |5 g& b" g+ i) }, ^5 X    For Each elem In mspace! S; S& Q, \0 ], f- k3 W
      With elem
  q. D& q/ Y# _* k) O% D, x9 X        If StrComp(.EntityName, "AcDbBlockReference", 1) = 0 Then
3 G2 |) W' k2 X$ t1 h           If .HasAttributes Then7 V; @3 y8 _+ ?/ L
              Array1 = .GetAttributes4 M+ }+ Y5 g' r, y" O5 {/ Z0 ?) t" M* Z
              Array2 = .GetConstantAttributes
; Q. h3 s. U7 C8 Z4 O$ N            For Count = LBound(Array1) To UBound(Array1)3 `; x+ k- m! k
               If Header = False Then
$ ]. }9 b) g9 Q9 p5 b% J                 If StrComp(Array1(Count).EntityName, "AcDbAttribute", 1) = 0 Then
3 H7 {& N: \8 Z2 D. Y5 a/ E, i                  excelSheet.Cells(RowNum, Count + 1).Value = Array1(Count).TagString% y& G% @* z2 n* d
                 End If2 s6 f3 Y1 @2 p0 s$ p5 ?9 o4 K9 X8 v
               End If
5 ]) q- Q  j4 L- T            Next Count
3 ^/ J. ^, }* f! L            
6 Y! q) `3 e  |# F+ Y; D            For Count = LBound(Array2) To UBound(Array2)
* r  J) v* _2 \; ^               If Header = False Then
2 @- i* }+ s7 X1 Y- W- c                 If StrComp(Array2(Count).EntityName, "AcDbAttributeDefinition", 1) = 0 Then' c+ \5 G: n+ [  q' d. V
                  excelSheet.Cells(RowNum, UBound(Array1) + 1 + Count + 1).Value = Array2(Count).TagString
, A2 o) B6 `" F- R) P  b/ E                 End If
; ~8 U0 {% g6 ?0 D- @: I               End If
6 t/ C* Z% I" A4 B* U6 Y            Next Count1 M; b; a! J1 V# n4 J
            + u; {' \8 d1 P  m" U
              RowNum = RowNum + 1- s7 e5 K; b( w- [
            For Count = LBound(Array1) To UBound(Array1)4 T7 A/ c) x  A" c8 y) M8 c. Z
               excelSheet.Cells(RowNum, Count + 1).Value = Array1(Count).TextString
7 T6 C4 G$ y4 g/ n& B8 Q! l            Next Count+ r, O8 s- i( i, h, |
            
: @5 H: c  e0 b* a            For Count = LBound(Array2) To UBound(Array2)! Q; o0 N5 ^% e& |- [; C7 ^) O
               excelSheet.Cells(RowNum, UBound(Array1) + 1 + Count + 1).Value = Array2(Count).TextString
$ I7 E0 B" m/ o; ]' L            Next Count8 @' W# t: ]0 G+ Y! }4 `9 L* P
            
3 o. N3 P% z) Q, Z* d. e            Header = True
. }; J) A1 l/ W0 M. P2 G            End If+ c0 f+ K# w$ {2 Z/ z+ j
          End If+ ]3 |2 N5 A3 t5 z  O0 A
      End With+ k  i; V. }" F2 P
    Next elem9 l& r* r+ V! J
    NumberOfAttributes = RowNum - 15 q8 l0 c8 c7 h/ m9 n; `
    If NumberOfAttributes > 0 Then
# ?1 g8 ?6 q$ R6 M" L3 o' |+ |; L      Worksheets("属性取出").Range("A1").Sort _3 `9 U2 @4 ^6 I/ S& x. m- Q# N  v
      key1:=Worksheets("属性取出").Columns("A"), _1 N. X2 v; \+ X$ s& A# |7 \- q: A
      Header:=xlGuess  S0 ^9 d1 F  @0 }1 |
    Else% N6 k$ K6 O/ O  A9 a% k" S2 X7 @
      MsgBox "无法提出图形文件中的属性或此图形文件中无任何属性!"
5 o* p) {; F. h    End If
$ T1 F& C( j& Z/ n    9 g) t( v8 i9 t, k4 K  H2 e, d
    Set currentcell = Range("A2")2 v4 T3 u. A% V# q6 s6 O# r. ]
    Do While Not IsEmpty(currentcell)
( n* x8 T& e8 V5 K* h        Set nextCell = currentcell.Offset(1, 0)
4 y9 H& S5 s( Y        If nextCell.Value = currentcell.Value Then
8 j8 A- l, O5 c' j! j            Set TCell = currentcell.Offset(1, 3)' H( A' Q) \4 F& ^
            TCell.Value = TCell.Value + 15 H7 l' t/ }& P, A  E) \; v
            currentcell.EntireRow.Delete& H. V' N9 M0 [, s( D3 e2 r5 g1 M2 a
        End If
' [( D# [. g$ K7 P$ p6 @        Set currentcell = nextCell
* R+ X5 n* P; v$ y9 Y' w- V/ k    Loop, Z1 `/ T9 _3 v# [% G
8 z- K+ g* h9 _% N+ H6 Z, N
   
' k! P) @* Z  z1 P. o" \    Set acad = Nothing# X  E! q( ^2 d+ u
End Sub
发表于 2007-6-3 21:28 | 显示全部楼层
发表于 2007-6-4 20:46 | 显示全部楼层
这个真的难说的; X  F$ X0 h3 {. P/ {+ w
想当年用EXCEL宏的时候也经常出错
2 b% g2 Q3 m# `' ~! ~自己慢慢的去调试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-9 00:25

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

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

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