CAD设计论坛

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

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

[复制链接]
发表于 2007-6-3 19:35 | 显示全部楼层 |阅读模式
这段代码 我找到时 说明是可以将AUTOCAD中的属性块中的属性提取到Excel中
8 d: |9 g/ G9 [我用的是AUTOCAD2007 打开VBA复制进去 然后工具-引用,把Microsoft  Excel勾选上
. G" C5 {9 J/ ~然后编译   光标停留在“mspace As Object”这句上 : g# |/ A1 R9 g
编译报错  “成员已经存在于本对象模块派生出的对象模块中”
( C( C! B1 s3 f9 h2 J$ }% o9 }# C然后小弟查了很久 也不知道 对不对 把mspace改成了myspace/ k" \; G( b  U% Z
再编译就没有报错 通过了, M3 k6 `  x, X! Q3 j& @
但是运行宏的时候 又报错“运行时错误429,ActiveX部件不能创建对象”
3 [* p8 e( j" d$ Y请各位帮忙看一下 或者 高手可以指点一下小弟
9 d; O% C6 N4 Z  }( D3 M6 k; [& |* P感激万分
2 U" u7 T+ U  w! f9 K7 K
# b+ \/ ], J: j4 D  M  |
/ Z& d* k( T2 e; O+ L- jPublic acad As Object/ X5 X+ Y2 Q1 i0 E* G8 V
Public mspace As Object
8 w/ J+ q, P0 O6 h) [1 @Public excel As Object& |* I  A; G, U* t' |
Public AcadRunning As Integer+ l3 ^9 B: F2 N) g* h
Public excelSheet As Object" N* x! `4 |/ O
Sub Extract()
8 }, b7 t) D& u+ ~7 T    Dim sheet As Object
6 X- J8 t3 P. Q( U* f    Dim shapes As Object% u- i/ G/ z6 e) ~
    Dim elem As Object; d$ X/ o' f3 }, T
    Dim excel As Object
% x+ z  Y- ~5 y' x" n" M1 n9 }$ F    Dim Max As Integer- ?- B- \( G& B5 e& V4 s; w8 ]
    Dim Min As Integer
* z" Q0 r( H5 n" ~0 u+ W    Dim NoOfIndices As Integer
* T0 T* F/ V8 t    Dim excelSheet As Object, P( I9 g, |0 d7 g; s
    Dim RowNum As Integer& s1 d: e* |: C& |/ e
    Dim Array1 As Variant, Array2 As Variant# |4 ]5 n% @! c' |& M5 M
    Dim Count As Integer9 P0 y) k! P2 _3 p

: N+ @9 j, o2 E; Y! ]8 i3 W5 P& E
" C+ H3 @0 z  p+ I2 H3 p$ ~2 m; D7 D# w1 c. l- P& s
    Set excel = GetObject(, "Excel.Application")
* \9 m0 v  l/ O: t% y0 U4 }. QSet excelSheet = excel.Worksheets("sheet1")! c) n' [3 F0 C$ I8 o7 k
     Dim Sh As Object, rngStart As Range* U) ~; S' P4 ^7 u2 G+ }
     If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub. s! o+ A! g* U/ o! Q: a
     Set Sh1 = ExcelSheet1
2 u( S; d* D- PSet rngStart = Sh1.Range("A1")& }' l4 z& ]0 W% g
    With rngStart.Rows(1)
. \* k6 a$ S! I' M) a9 ]End With
* M8 T" T+ d$ i! W- X    Set acad = Nothing
/ `# |) J7 X# I0 T7 p6 @" P    On Error Resume Next) h+ R0 J- q7 i* l% i
    Set acad = GetObject(, "AutoCAD.Application")
4 A2 H: P9 j2 N7 v    If Err <> 0 Then& a: R* L, \1 s3 F! q
    Set acad = CreateObject("AutoCAD.Application")3 J8 D; M8 ^+ c
    MsgBox "请打开 AutoCAD 图形文件!"
$ ~5 A& t/ C5 F    Exit Sub
  [7 m* S4 D$ o    End If+ w4 @; }1 y$ n: t8 L4 k
- M( K& b) V6 L5 R
    Set doc = acad.ActiveDocument0 y, Z5 r6 j9 _  p$ d/ S' p
    Set mspace = doc.ModelSpace
% X' N5 \7 G  \4 ?8 Y! a    RowNum = 13 u! o8 T  P$ y: x7 v
    Dim Header As Boolean
' p' w6 b4 j9 e  B8 u    Header = False
" M' i8 K( Z$ ~8 ]  w/ I    For Each elem In mspace
% V7 K9 e/ [2 A0 j3 ]# z      With elem% V3 T4 c. G; z
        If StrComp(.EntityName, "AcDbBlockReference", 1) = 0 Then. H. W6 C! A( I% t( g
           If .HasAttributes Then7 ?" M8 X& t1 A
              Array1 = .GetAttributes
! ~7 X6 r) ]. L; ~              Array2 = .GetConstantAttributes
; [: w( C( X5 r$ i            For Count = LBound(Array1) To UBound(Array1)
( m+ v. z" ?; U3 v, t               If Header = False Then& y. Q+ z8 Y' m) D7 Q- x
                 If StrComp(Array1(Count).EntityName, "AcDbAttribute", 1) = 0 Then
( c. I8 J- Z, E3 v$ M! @" A; Z                  excelSheet.Cells(RowNum, Count + 1).Value = Array1(Count).TagString
& a* N9 Q  k" c  f& X5 f' l                 End If
! {( H+ |, g; R6 \; A7 M               End If* Q/ h0 k5 T% p- D
            Next Count: l0 l. P, Z+ n6 l( O
            
# _8 I5 J" R+ m" y! S$ E: e8 U. x            For Count = LBound(Array2) To UBound(Array2)
5 ]4 n* Y2 U2 U# z- P0 ?+ b0 O               If Header = False Then
' ?7 M2 ?. U6 @; _! C' g' I                 If StrComp(Array2(Count).EntityName, "AcDbAttributeDefinition", 1) = 0 Then
, U# e$ n! f4 _8 s' J0 J5 v# A4 R                  excelSheet.Cells(RowNum, UBound(Array1) + 1 + Count + 1).Value = Array2(Count).TagString, d& r; R0 N% i, g6 p4 u
                 End If6 D: K' e: p3 q; y2 H
               End If( J4 V8 ~+ _2 ]
            Next Count+ L  F" \+ o' g. d
            
3 C/ z2 g3 W) [  @4 Z              RowNum = RowNum + 1
" T1 G4 L" S2 i3 r, f- I; w% @, V            For Count = LBound(Array1) To UBound(Array1)
- \2 @) h# t/ N9 e( I               excelSheet.Cells(RowNum, Count + 1).Value = Array1(Count).TextString
" \4 e1 g/ o( z            Next Count
) D' e, ~2 n) @9 l3 E$ r% G% A; d- u            
0 z* I' H4 a9 l            For Count = LBound(Array2) To UBound(Array2)
# i# g: D7 g: j: Y               excelSheet.Cells(RowNum, UBound(Array1) + 1 + Count + 1).Value = Array2(Count).TextString% k6 Z  _6 p  E4 D
            Next Count
3 ?7 E2 }( h" d% q            
. p8 o% P+ C6 y2 e3 x) [# b( E: n2 V/ W            Header = True. b5 X$ i" H. N1 y# k2 M1 ?! E0 ~
            End If- |, c7 k" `, C& l- [
          End If$ A) |0 \9 G% P) P
      End With% {2 {3 S$ n, e1 b* N7 u1 A
    Next elem
- s  Y8 X* X- L+ C% h" Q    NumberOfAttributes = RowNum - 1
! N3 \8 N: B1 G* d7 P    If NumberOfAttributes > 0 Then$ m: C7 j8 n4 M" Q) _
      Worksheets("属性取出").Range("A1").Sort _
0 `9 f' @& h$ z      key1:=Worksheets("属性取出").Columns("A"), _/ B- T3 f8 |+ n  [# D- t& C
      Header:=xlGuess# I+ H" M! y# y- @1 _# I/ |! O
    Else
% ~% a  ^2 I1 }- ]2 i# y      MsgBox "无法提出图形文件中的属性或此图形文件中无任何属性!"
. m( p+ K; i3 Q7 s! ^1 O% B8 O    End If" H) N& p8 v; x& q# f
   
) q+ J- r+ ]  }8 s2 X    Set currentcell = Range("A2")( h" n- y" Z* B4 M7 g
    Do While Not IsEmpty(currentcell)
+ m0 b9 F/ q3 n& X% v        Set nextCell = currentcell.Offset(1, 0)9 Q% U# p% b  l' r$ y
        If nextCell.Value = currentcell.Value Then
9 Z/ l( k" J3 t$ d            Set TCell = currentcell.Offset(1, 3)1 i+ a/ p2 Y# E  E
            TCell.Value = TCell.Value + 1
& e' n$ s* Y* a( M5 P2 q            currentcell.EntireRow.Delete) q/ Q6 H; K" X, m6 W
        End If& a  k6 Y8 l. e, A$ O# y
        Set currentcell = nextCell
+ ^5 ^& [: q( t/ ?    Loop  g1 l1 N( `6 d* e( w/ U; o+ A

: d7 u( N; |* f   
+ U$ h- W2 h1 G, Z0 i! s    Set acad = Nothing
1 O5 m( Z2 x3 U0 ^End Sub
发表于 2007-6-3 21:28 | 显示全部楼层
发表于 2007-6-4 20:46 | 显示全部楼层
这个真的难说的; @9 b* M7 z& q( f
想当年用EXCEL宏的时候也经常出错
; U& _, ?4 t& W! z自己慢慢的去调试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-5-31 20:12

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

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

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