CAD设计论坛

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

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

[复制链接]
发表于 2007-6-3 19:35 | 显示全部楼层 |阅读模式
这段代码 我找到时 说明是可以将AUTOCAD中的属性块中的属性提取到Excel中
7 i0 H/ d  P  _% f5 F0 `. C我用的是AUTOCAD2007 打开VBA复制进去 然后工具-引用,把Microsoft  Excel勾选上  d/ ^: g& w; P1 b% O2 g) Q
然后编译   光标停留在“mspace As Object”这句上
" X6 i, Q" u% A! l  \. C! o编译报错  “成员已经存在于本对象模块派生出的对象模块中”
4 C) R! l; w! }) ^; |然后小弟查了很久 也不知道 对不对 把mspace改成了myspace
$ [; g7 }7 j1 B4 i9 w再编译就没有报错 通过了% `: l& ^7 I. x
但是运行宏的时候 又报错“运行时错误429,ActiveX部件不能创建对象”7 r! u& r1 z* n' d0 ]6 I
请各位帮忙看一下 或者 高手可以指点一下小弟
/ V8 N7 B2 M- h- X感激万分
) j* ~. Y% k0 s" h, v4 d" c; D( [! {0 @/ m# {

4 S- y  f9 H1 ~! @Public acad As Object5 f" c! [, S8 v
Public mspace As Object" m% e3 L) N2 h! b8 S- K
Public excel As Object$ H% r" r  v. G4 q- y  R8 l% q
Public AcadRunning As Integer3 F0 b7 _5 p) E4 V
Public excelSheet As Object! Y$ C6 Q3 }6 a
Sub Extract()
2 L( t; A, @; y% f: X+ q! k: a    Dim sheet As Object
5 S8 Q2 C! Y0 u% s" V4 Y    Dim shapes As Object8 s5 k: }2 i9 ]' p5 y+ D
    Dim elem As Object# h- ~/ {- @( P5 G1 p$ U
    Dim excel As Object
# {2 Y8 r" T/ D" e8 g    Dim Max As Integer# D; c/ S2 m2 K$ ~; D# {0 [/ j
    Dim Min As Integer
+ ?+ m! k$ b' G0 c  i8 f    Dim NoOfIndices As Integer8 e3 W( \  [! ?3 p1 r* ~' E
    Dim excelSheet As Object5 }- {/ m; m/ \; ~. c# p
    Dim RowNum As Integer
# Y7 R; i- D0 P$ A% U% A    Dim Array1 As Variant, Array2 As Variant
# S- D( O# h0 Y5 s4 f    Dim Count As Integer
8 M- k2 _1 ?( L& ^# ]1 C0 D& ]: e9 w% p
- X* B( K) ?$ O7 {
! I# e& Y: w  M
    Set excel = GetObject(, "Excel.Application")9 R2 a! Y2 V' J# }
Set excelSheet = excel.Worksheets("sheet1")
) C+ X# b/ u" B. L" D     Dim Sh As Object, rngStart As Range! z- ?! p. X' W  p0 D
     If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
2 v) K' p' x3 F     Set Sh1 = ExcelSheet1  c8 [1 c* r4 q7 C  {7 q2 H
Set rngStart = Sh1.Range("A1"): \' y8 F0 {( N, s; y  Y' R* M* t
    With rngStart.Rows(1)- g+ g6 [9 a! O
End With/ P" u- h  Y* K  r) m/ H4 ~8 ?
    Set acad = Nothing, z8 X0 \+ y: Z* S6 \) R
    On Error Resume Next& k2 F, i' ^4 D& d: {
    Set acad = GetObject(, "AutoCAD.Application")4 m) k8 x1 t7 \  @& }
    If Err <> 0 Then( t7 m# c- m( ~
    Set acad = CreateObject("AutoCAD.Application")" [$ h% u; Y2 u" r
    MsgBox "请打开 AutoCAD 图形文件!"
0 N( i7 J" Z; W( `# l) t! a- T    Exit Sub+ t6 E. _0 P- J. Y% @
    End If: d$ q+ ^5 m4 N4 C! S
" A" Q: Z; T- _" z
    Set doc = acad.ActiveDocument( Z) G  P$ u# B6 C
    Set mspace = doc.ModelSpace( {  r0 a/ d) s5 e/ [
    RowNum = 1
# W8 c1 h4 [* u7 b    Dim Header As Boolean
3 h0 `* Z# C' t! O    Header = False
( m3 ^6 L! o9 [1 k. x% L    For Each elem In mspace) r$ f+ K5 f, D8 b- P$ h3 G
      With elem. O- b' C' N$ |$ G  \! F, Y
        If StrComp(.EntityName, "AcDbBlockReference", 1) = 0 Then
. ]7 T, ]! o9 U7 Q# s" |           If .HasAttributes Then0 T5 v( y4 `3 Z7 V
              Array1 = .GetAttributes
. `( g' X6 Z2 p) H0 S- ^1 a              Array2 = .GetConstantAttributes
7 Q9 G! n+ l4 E# P5 L$ p            For Count = LBound(Array1) To UBound(Array1)
# s, q" E, q+ \2 g5 t/ @               If Header = False Then
) ^8 H  M, w8 V( b+ U( [                 If StrComp(Array1(Count).EntityName, "AcDbAttribute", 1) = 0 Then/ }9 \& _) k, E7 o
                  excelSheet.Cells(RowNum, Count + 1).Value = Array1(Count).TagString
5 i4 K! C! J" o; T- E                 End If
% r$ F, M" B$ Q0 E. T- Y$ ], A               End If
9 W, [* M8 F, ~$ R* R7 N6 O( }            Next Count
% q, X( s& g( p+ y4 g            
' {! J& ~% N# y2 C! b9 i  a            For Count = LBound(Array2) To UBound(Array2)
; b- U+ r, u! |- G- P               If Header = False Then+ N) q( {  \1 ~
                 If StrComp(Array2(Count).EntityName, "AcDbAttributeDefinition", 1) = 0 Then0 }( r- H) z8 T& u; h7 S" w1 H  ?7 [
                  excelSheet.Cells(RowNum, UBound(Array1) + 1 + Count + 1).Value = Array2(Count).TagString. y0 z3 P9 ]: N& w( z- ^  L$ ]# W
                 End If: g; ^. l5 M* B) m% k
               End If
6 L/ o4 y. {# @3 C' }            Next Count
, K- l7 _( v) m6 \0 g4 M            6 W- y7 z( T4 z$ x: D, ]2 _* C
              RowNum = RowNum + 1* B& g" Q: H$ ?. X' Q. c
            For Count = LBound(Array1) To UBound(Array1)" L" F+ ~+ @7 Z3 r* {, k9 j
               excelSheet.Cells(RowNum, Count + 1).Value = Array1(Count).TextString
: y' v. z) i8 _  g            Next Count$ p$ ]7 E7 o3 _1 L2 ~) R
              y0 o/ L: x6 t9 S
            For Count = LBound(Array2) To UBound(Array2)
: h9 A) t  c5 ~# G, d  W, O               excelSheet.Cells(RowNum, UBound(Array1) + 1 + Count + 1).Value = Array2(Count).TextString
& j! v) p! @8 T            Next Count6 M. e" |/ X- z
            
0 _+ M4 ]3 g, ^  L            Header = True
- O, d6 d! ?0 Z7 x            End If9 g4 z+ |1 |: Y1 f
          End If9 S/ p" E9 k) k
      End With
8 a  q$ ?' v! [/ ]& R9 w    Next elem
" z" d4 g; z, q' i1 j4 O5 X    NumberOfAttributes = RowNum - 1
6 t" d$ ^2 F! L    If NumberOfAttributes > 0 Then
) j6 E- S9 m* R/ r, e      Worksheets("属性取出").Range("A1").Sort _' E& f. ^- M& k
      key1:=Worksheets("属性取出").Columns("A"), _/ v% y6 t% v1 c/ L) u
      Header:=xlGuess( f  L. Q  Q$ Y# j
    Else3 ~5 x) m8 k, V8 P1 `, V8 n
      MsgBox "无法提出图形文件中的属性或此图形文件中无任何属性!"
6 {4 d8 O8 n4 n9 I7 O' W    End If3 B% J0 ^4 R5 V/ m
    * O. ^7 z" V2 Y
    Set currentcell = Range("A2")7 Y) k- h- _' X. q& D
    Do While Not IsEmpty(currentcell)
5 {4 p/ q' k! T+ M3 q8 h- `        Set nextCell = currentcell.Offset(1, 0), t* u4 ~0 M. L8 Q0 N& D: M2 |# m
        If nextCell.Value = currentcell.Value Then: T; a- [$ D) e5 w4 y
            Set TCell = currentcell.Offset(1, 3); @' H  k: W- o; _+ I+ x
            TCell.Value = TCell.Value + 1/ R- _# v5 h2 S$ s
            currentcell.EntireRow.Delete
2 q' v. {, t, O) g2 c0 b3 n, T5 @        End If. e) |5 _: s6 U: F5 N* b
        Set currentcell = nextCell
' q! {# r5 {' T! ~# a% Z& W/ c    Loop0 u! J# T; W" _. X- D
, K4 Y0 n0 H: u) j2 m7 T
    , I$ j! w3 ^/ E' T- g  w4 Q. R6 `4 r
    Set acad = Nothing, y8 {. G& M& u, B3 q
End Sub
发表于 2007-6-3 21:28 | 显示全部楼层
发表于 2007-6-4 20:46 | 显示全部楼层
这个真的难说的6 u" m. E' V- e( [" {
想当年用EXCEL宏的时候也经常出错; t7 l7 S. @" n! M* K3 O
自己慢慢的去调试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-10-2 22:04

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

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

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