CAD设计论坛

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

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

[复制链接]
发表于 2007-6-3 19:35 | 显示全部楼层 |阅读模式
这段代码 我找到时 说明是可以将AUTOCAD中的属性块中的属性提取到Excel中
: ?! e: a5 A/ v: x6 B我用的是AUTOCAD2007 打开VBA复制进去 然后工具-引用,把Microsoft  Excel勾选上7 K: D7 ?4 E# `% w+ B# Y
然后编译   光标停留在“mspace As Object”这句上 0 d) w0 Y: E1 H
编译报错  “成员已经存在于本对象模块派生出的对象模块中”
2 G& u- X" J. W0 z然后小弟查了很久 也不知道 对不对 把mspace改成了myspace
9 k* M* w4 a, V再编译就没有报错 通过了: ~8 c6 E+ ^! d# L+ j5 ]$ G7 p- D
但是运行宏的时候 又报错“运行时错误429,ActiveX部件不能创建对象”( O3 p% c4 k4 ~  w8 W5 D! }4 v
请各位帮忙看一下 或者 高手可以指点一下小弟
( @  W9 h# ?9 E+ J* A感激万分
0 V2 q; j/ P$ B/ D" u6 Z3 x& X+ M* Z' P7 T) S9 l0 U, c; j

4 N  G- y4 @! @6 A: NPublic acad As Object: t7 H5 C3 h) h1 G! U9 {
Public mspace As Object
2 G  _1 b- l0 s. X6 `Public excel As Object% {+ e( J# }4 O( Y6 Z! k
Public AcadRunning As Integer" a1 @/ p3 V7 J2 C  S
Public excelSheet As Object
! v5 Z, i+ v/ T8 H; G! c$ PSub Extract()
! q7 T% ]/ ~" f1 b. x    Dim sheet As Object
  }8 u1 y( n1 ^0 l    Dim shapes As Object
/ d. ~* b. i& P5 ]; [# a    Dim elem As Object
, I; p% ?; Y' }, `& A    Dim excel As Object
9 P7 L7 H6 H4 U1 H    Dim Max As Integer
8 D% G. z: m3 k' q+ H% P. A! n3 Y- j    Dim Min As Integer9 q. c) x9 \% x
    Dim NoOfIndices As Integer
3 y% ?) P- a( F' U6 t- u5 Y    Dim excelSheet As Object1 _- B6 ~" ?0 X3 [. p
    Dim RowNum As Integer
5 a% ?2 g+ i  ~* j    Dim Array1 As Variant, Array2 As Variant  E$ v( E! F! W( N3 s! d4 D
    Dim Count As Integer
* h/ X% s, a5 Z# i$ l# ^" m8 t* x$ O: G% x# @$ r4 t

0 G0 Q6 k3 j; D1 N5 u
* U0 r6 p: C" S* C3 j' m' _    Set excel = GetObject(, "Excel.Application")
; i# M8 b- e5 @* aSet excelSheet = excel.Worksheets("sheet1")
" u2 y6 `/ M/ l6 N* \! F5 e     Dim Sh As Object, rngStart As Range; f1 T+ O8 J: J/ D8 t1 d0 \
     If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
/ e( m# V5 Q0 m. q9 d9 i5 @. ]  Z     Set Sh1 = ExcelSheet11 r7 i% G6 A) N) Q) q5 [. C
Set rngStart = Sh1.Range("A1")
% g+ {3 w4 X( }6 E2 }6 ~( y3 S, l    With rngStart.Rows(1)4 L7 U4 B& O" \- {( p' U+ N$ }$ A
End With
- ?8 m: g  A3 `' d3 v3 q6 G    Set acad = Nothing
# F9 x+ t: r9 `. O    On Error Resume Next
9 A8 P3 e  X. W% P: Y' J0 H- i    Set acad = GetObject(, "AutoCAD.Application")
0 Q9 C6 L* L8 u1 p# J% p    If Err <> 0 Then
/ e+ F  k! r4 b  [/ H6 y# D* b2 i    Set acad = CreateObject("AutoCAD.Application")
; ^8 @+ [  y* q$ R. f7 t- Y    MsgBox "请打开 AutoCAD 图形文件!"4 L9 T& Z1 X; j8 M# p7 O7 K
    Exit Sub
$ G, p/ I. @6 ^6 b* T    End If5 S( u/ a/ h% l3 B( T
$ g" k- t# e0 @7 G
    Set doc = acad.ActiveDocument
" V6 x4 {: E8 B4 |    Set mspace = doc.ModelSpace
1 a: I5 Z/ N  o9 R, ^# P9 C, b6 o    RowNum = 13 q+ D5 D- M2 \. t
    Dim Header As Boolean
8 T0 Z" N: v( H; Z    Header = False
+ c3 F4 S; a2 C" H1 z    For Each elem In mspace6 p0 Y4 |/ b! y
      With elem
! @  y; k2 m5 k* U% {0 N7 B        If StrComp(.EntityName, "AcDbBlockReference", 1) = 0 Then
$ z0 |2 V+ |9 k2 ~6 d" r/ U- N           If .HasAttributes Then% F7 u4 e" }' ]
              Array1 = .GetAttributes/ p+ ^) S' L/ m  l( }
              Array2 = .GetConstantAttributes
+ E$ w6 j) v1 f            For Count = LBound(Array1) To UBound(Array1)  A$ I( y/ J' d+ V% S* J* N
               If Header = False Then
. u4 W0 u: v' r6 {                 If StrComp(Array1(Count).EntityName, "AcDbAttribute", 1) = 0 Then( i6 |- e' I5 z$ B  U1 q! d1 n
                  excelSheet.Cells(RowNum, Count + 1).Value = Array1(Count).TagString
3 D3 j) t1 ^# P3 t/ }* I: x                 End If
2 N0 u% ^$ S+ O5 d+ M               End If
4 M3 c5 m, C- |            Next Count7 y7 ~, U( Z, o" L1 f
            
( r7 n* c5 \' I* K# _" S            For Count = LBound(Array2) To UBound(Array2)& }; s4 F! }  D/ b
               If Header = False Then/ v3 o$ E8 e" D: K5 V% H7 v
                 If StrComp(Array2(Count).EntityName, "AcDbAttributeDefinition", 1) = 0 Then1 p6 x! ?8 |6 ?1 k/ y
                  excelSheet.Cells(RowNum, UBound(Array1) + 1 + Count + 1).Value = Array2(Count).TagString
2 R) S+ z: \9 q6 x  b                 End If) K  S; Z' y. V* q  P  c& t% N; @' D4 B
               End If) h5 X+ E$ J* _% ?' Y, X( ~8 ^) R: k8 b! K
            Next Count0 b8 h! K1 l4 j4 ^# {
            ( H. B; f9 A+ D# ^! P6 [. h
              RowNum = RowNum + 1
( H7 h9 z7 v  _- u7 G0 o  j6 R* {            For Count = LBound(Array1) To UBound(Array1)$ x( Z2 y3 S6 _4 Z- k  S# S
               excelSheet.Cells(RowNum, Count + 1).Value = Array1(Count).TextString
; D* S/ m& x4 k            Next Count
  ]4 y; ], g- a- m            ) X: @7 Q; O6 |4 |$ u6 [
            For Count = LBound(Array2) To UBound(Array2)1 }" S$ Y8 ]% `7 I  H3 ^
               excelSheet.Cells(RowNum, UBound(Array1) + 1 + Count + 1).Value = Array2(Count).TextString
* O9 P7 r' Y  `) T% n  W            Next Count
. H0 @* P4 {7 r. i7 p0 E" X            
8 [! Q$ Y1 V8 K# n. o4 e& K0 M            Header = True  T$ }; p3 @& P) ?& c& h; A- \
            End If  g* X0 I& i2 g+ ]: e2 |, S5 T
          End If4 x- N6 m2 q2 e) J5 j4 x
      End With4 O; }& n2 [1 e
    Next elem. X9 j+ U4 z0 [
    NumberOfAttributes = RowNum - 12 f& S  h6 v4 }8 v. o2 p2 N
    If NumberOfAttributes > 0 Then
, y( O  f- o! X9 `9 R% P2 U6 E      Worksheets("属性取出").Range("A1").Sort _
2 l  D1 z2 ]# ]! l0 \1 |      key1:=Worksheets("属性取出").Columns("A"), _2 q5 ^% q4 T7 O7 k  h
      Header:=xlGuess
  x4 z2 {9 f* N    Else
0 h1 l# J; F' G- r      MsgBox "无法提出图形文件中的属性或此图形文件中无任何属性!": G+ W6 b2 D+ H$ x+ I& W
    End If
7 K. B. O( ?* v) W* m   
+ B& X" o! C" X$ c' i2 @6 c' E1 V    Set currentcell = Range("A2")% m! D1 ]9 `. E& W6 ^( E$ j
    Do While Not IsEmpty(currentcell)9 S4 k) u. v9 D- O. z; k
        Set nextCell = currentcell.Offset(1, 0)
! b& H! ?$ `4 Q. U3 R  j# \3 |        If nextCell.Value = currentcell.Value Then( @# k% {$ h0 s
            Set TCell = currentcell.Offset(1, 3)! {, h; j' |( |2 {- ^) x1 y$ e
            TCell.Value = TCell.Value + 1
5 w+ U, h3 |2 @' s* Y' `            currentcell.EntireRow.Delete: I% n. C- C& N; q
        End If7 g; X1 q; K( ^2 `" K
        Set currentcell = nextCell
. ]* q" F/ D( t( X9 a3 k  ~    Loop& o4 r2 j* W. e! \" E" K" \3 ]
' @" `$ }  X3 i0 x, F3 g9 U
   
: J* M2 |/ q$ F2 A' U+ F    Set acad = Nothing
' h" O; ^+ a% mEnd Sub
发表于 2007-6-3 21:28 | 显示全部楼层
发表于 2007-6-4 20:46 | 显示全部楼层
这个真的难说的2 j# S% {1 K& {
想当年用EXCEL宏的时候也经常出错0 w" c- l6 O& `
自己慢慢的去调试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-9-17 02:01

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

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

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