|
Sub list()
, D4 d( D* J3 aDim work As Workspace
8 W! K8 V3 l7 ?9 F- v! W- L* jDim new As Database ! R: G7 p+ A- Q
Dim elem As Object 9 l; k, o# z0 p. ~+ w
Dim rs As Recordset ( ]4 u+ B. V( ?
Dim RowNum As Integer 3 {" p- y( Q6 _, x# p" M5 I, |8 {7 x
Set work = DBEngine.Workspaces(0)
$ O5 T8 ^: `( r# W m yDim dbs As Database , Y3 P& c( D$ F
Dim tdfNew As TableDef
& X2 n& O$ j. n, [" dDim tdf As TableDef
3 G! {' e4 @6 v! oDim dbsname As String # Q- P- w8 H( C8 I
Dim array1 As Variant / T+ e% Y |7 i! w7 R
Dim array2 As Variant ‘声明所需的变量及类型
: _! ~3 h0 S! rdbsname = “D:\材料表.mdb” * n+ B7 }( g8 i. d5 {/ S% \) D$ `
‘声明Access数据库写到哪一个文件
9 S' o5 ]6 q6 N. f+ C$ w1 QOn Error Resume Next
: b; U7 } K: h& g) pSet dbs = work.CreateDatabase(dbsname, _ 6 `3 H0 r* t7 R- R
dbLangGeneral)
9 R" @" h2 Y- h3 C' W8 r) l/ uIf Err Then
$ s! L9 @, X- O$ _) D" z1 Y! Z+ L( MKill (dbsname)
, G V. u% u8 Y* }7 V- N‘发现要写入的Access数据库文件已存在就将其删除
0 T& v b$ ~% X5 J- D [% J7 fSet dbs = work.CreateDatabase(dbsname, _
7 K N5 s9 r# [dbLangGeneral) 6 U& h, y/ \2 V. r5 C: k: ]
End If " s& e" y, s; r8 I6 b: y
Set tdfNew = dbs.CreateTableDef
9 E( c1 d) j- V0 L. P# x(“电气 _材料明细表”) ; n3 ^2 H0 J/ @! E) d. B
‘建立一个名为电气材料明细表的表 ( ^1 z7 B& ^: o) q! Y0 F5 {8 N: d
RowNum = 0
& L; O7 @' T7 V4 P- `Dim Header As Boolean + R, F6 M" t8 p& H" K3 i, V% G
Header = False : W& A) P% Z" a
For Each elem In ThisDrawing.ModelSpace
- s6 A+ Z; n! p% V& ^- ^‘在CAD模型空间,查找所有图形对象 - R z$ Z g2 ~1 u
With elem
" s0 n1 [9 u% G! Y/ `2 A9 C' oIf StrComp(.EntityName,_
/ v- Y" t, _2 H“AcDbBlockReference”, 1) = 0 Then & M% Q; {/ x4 b/ |/ m1 G
If .HasAttributes Then
, P4 Q v& N3 P/ q# narray1 = .GetAttributes
; ~! X4 X/ O, v( @; warray2 = .GetConstantAttributes 4 j: w5 A; _! z1 s
‘设置array1指向图形对象的属性
. X+ r& J1 o. g' {" T) e‘设置array2指向图形对象的固定属性 , ?/ G" K. h/ A. ]( F8 l- T
For Count = LBound(array2) To _ 4 E: w: m, b8 Z4 C0 H4 S
UBound(array2) ( M$ C z2 A5 A5 ?" j. t6 e
If Header = False Then
! a2 L# w5 |$ K9 [' QIf StrComp(array2(Count).EntityName, _
4 V- j9 A& ], q5 K& h( o( R/ p. t" C“AcDbAttributeDefinition”, 1) = 0 Then 2 _- r7 ?, g0 x
tdfNew.Fields.AppendtdfNew._ 9 }8 T, E5 Q1 \, f0 J* @
CreateField(array2(Count).TagString, dbText)
" h& V$ I1 m6 o( ?0 m! W5 m! ~End If
/ ~ i% L" b( }6 H‘读出属性值读出,作为Access数据库表的标题
3 x* t: z" C8 F4 B' ^End If ! s- w' B+ @3 @& w) E
Next Count
6 T B2 w1 v6 n$ S& fFor Count = LBound(array1) To _ - K0 P# g4 P' V% A
UBound(array1) , E2 ]; _3 M9 W! [* V% o/ D
If Header = False Then ! q& q8 }; _8 E
If StrComp(array1(Count).EntityName, _
9 j* Q% J. u; L; l2 b& o6 {“AcDbAttribute”, 1) = 0 Then
* U7 i4 l6 A* [% J+ ~, D5 EtdfNew.Fields.Append tdfNew. _ + D. l/ c$ k8 n1 ]
CreateField(array1(Count).TagString, dbText)
7 E! v q7 \0 V. m6 ]End If - b4 `+ U; s1 n a
End If
& z; m, C3 C4 D( b4 v; @ fNext Count
0 D9 u3 V# Y6 R' c# e& VIf Header = False Then ( J- r$ }9 _ T1 A" I& e( ?
dbs.TableDefs.Append tdfNew
/ d9 [# M1 ?/ s m' b/ ~Set rs = dbs.OpenRecordset 5 \9 E6 g: @! }& H/ I& h9 K
(“电气材料 _明细表”, dbOpenTable) ‘打开记录 ! \! }- S, {6 n, t1 x4 C8 ^, c& T
End If * e' H9 `2 q0 i* M3 W5 b5 i' [9 I
RowNum = RowNum + 1
& a$ P9 Z$ M3 E2 f$ J+ e# e, C2 prs.AddNew ‘增加一笔新记录
$ P- R0 I) k0 u! i5 dFor Count = LBound(array2) _ / o( k0 X+ y/ s: ?( @ J- h4 u3 q
To UBound(array2) 3 k) a f9 ~9 f X: M
rs(Count).Value = array2(Count).TextString
% c4 i8 h: o# I. W# |Next Count ‘读固定属性值 4 w' S8 c( }+ S, _5 Y( t
For Count = LBound(array1) To _ $ c, k9 G, F; p5 o1 e I7 B6 {
UBound(array1)
+ t! u* W, B) P1 @1 N* crs(UBound(array2) + Count + 1).Value = _
6 a7 u p8 V p# Sarray1(Count).TextString 7 T/ s3 c7 p; q: R" V: ~" _2 P
Next Count ‘读输入属性值 * B7 h- w; u' Z4 A6 D7 f5 H" J
rs.Update ‘增加新记录修改结束
$ h- E( q# V" h+ PHeader = True ; W3 q6 r5 R3 O7 Z! y
End If
9 e* ?7 R# x% E" a9 JEnd If
3 d* Z1 m9 ?3 @( j' ~5 u$ pEnd With E% n& }, h* ~) A6 v a' r, m
Next elem
" v `3 C% \- O" prs. Close ‘关闭记录,释放资源
7 w7 f* Z% b% h# J+ B0 W$ k6 q: Gdbs.Close ‘关闭数据库,释放资源
& a0 n+ o d+ \$ N4 B7 _+ {End Sub |
|