QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 5028|回复: 8
收起左侧

[原创] 用VBA将图层信息输出到EXCEL的方法

[复制链接]
发表于 2008-6-17 11:38:22 | 显示全部楼层 |阅读模式 来自: 中国辽宁营口

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
使用方法:“Alt+F11”打开“VBA编辑器”,单击“工具”菜单,单击“引用”,在弹出的“引用-ACADObject”对话框中寻找并选中Microsoft Excel类型库(比如本机安装的Excel是2000版,引用的类型库就是“Microsoft Excel 9.0 Object Library”)。“确定”后退出对话框。双击“工程资源管理器”中的“ThisDrawing”对象,在弹出的代码窗口粘贴下面代码,“F5”运行。7 N3 h+ G) W2 H0 U. K  ^  B% \
7 W9 E+ u7 v+ i# R8 f
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
7 l* U/ G: I* [. M( @Sub TC(): A, d% \" T/ Y9 L" E2 z3 t
    Dim R As Integer, C As Integer, I As Integer, Ly As AcadLayer: w3 l3 O0 X/ C
    Dim xlApp As Excel.Application, xlBook As Excel.Workbook
6 t: G" Y7 ]# \6 c    ; O% z' Q# q$ t+ B* O8 [+ d% V8 H/ c
    R = 1: C = 1 '从工作表的第1行第1列开始填写,使用者自行更改
6 E  V. e2 q$ P  h   
% s& Z. o' y5 x    Set xlApp = CreateObject("Excel.Application") '打开EXCEL程序
9 S4 j' `7 H! @) E+ A- N9 p0 A    xlApp.Visible = True '使EXCEL程序可见
' m# h6 K) T: H% F    Set xlBook = xlApp.Workbooks.Add '插入新工作薄
: u1 N$ |1 }4 m- P    With xlBook.ActiveSheet+ Z, l" q, a; ~1 E
        .Name = "图层信息" '重命名当前工作表& h. d9 i5 m! o- k. ?
        I = R4 U4 v$ F4 h# S5 x& h% B- G/ X. A
        .Range(.Cells(I, C), .Cells(I, C + 11)).HorizontalAlignment = xlCenter  '所有填写项目名称的单元格水平中心对齐
6 ~; v. k3 }  l0 D4 d% M/ f) f; E        .Cells(I, C).Value = "序号"  '以下代码逐列填写项目名称4 t2 j( `2 q/ e. K7 H: y! I
        .Cells(I, C + 1).Value = "状态"
& p9 ]" H1 E0 |  M+ i        .Cells(I, C + 2).Value = "名称"
' K$ h5 D" s- ?. M" M# X; z0 u        .Cells(I, C + 3).Value = "开关"/ c. o# u" \" g1 Y4 v/ N
        .Cells(I, C + 4).Value = "冻结"$ F, f6 `: R8 F( R4 F
        .Cells(I, C + 5).Value = "锁定"
6 M' r6 \0 l( [! f: B5 p        .Cells(I, C + 6).Value = "颜色"
: k" O8 ^  o) F6 e3 F        .Cells(I, C + 7).Value = "线型", J' {) g' m% Y+ X* e$ U
        .Cells(I, C + 8).Value = "线宽"
8 y1 K) ~) A* J1 x- Z" m. A        .Cells(I, C + 9).Value = "打印样式") Z5 y/ I6 m) T9 L4 B
        .Cells(I, C + 10).Value = "打印"* e5 f; _) A. ], ?- x
        .Cells(I, C + 11).Value = "说明"
6 j6 Z! n5 l* j6 d% }1 D6 q2 p& X0 L        For Each Ly In ThisDrawing.Layers '遍历图层7 O' c# B6 S& R5 f5 }
            I = I + 1 '在下一行填写该图层信息
$ B! n1 U; T% Z  M8 X) a            .Range(.Cells(I, C), .Cells(I, C + 10)).HorizontalAlignment = xlCenter  '前11项信息所在单元格水平中心对齐* C* }6 E- C8 _; z% p  \
            .Cells(I, C + 11).HorizontalAlignment = xlLeft '填写图层说明的单元格水平左对齐% j6 `4 u4 d; d8 i
            .Cells(I, C).Value = I - 1  '在第1列填写序号
4 ]+ m- a9 A8 b& _/ R            If Ly.Used Then .Cells(I, C + 1).Value = "已使用" Else .Cells(I, C + 1).Value = "未使用" '第2列填写使用状态' l: u& {& w  X! b* w" U8 O
            .Cells(I, C + 2).Value = Ly.Name '第3列填写图层名称
% E; J8 c" k9 t  D' U            If Ly.LayerOn Then .Cells(I, C + 3).Value = "开" Else .Cells(I, C + 3).Value = "关" '第4列填写开关状态' _* R8 h  t9 i5 g; h1 g8 [
            If Ly.Freeze Then .Cells(I, C + 4).Value = "已冻结" Else .Cells(I, C + 4).Value = "未冻结" '第5列填写冻结状态9 g7 C" i6 K& ^/ Q5 \2 E3 j  W+ T
            If Ly.Lock Then .Cells(I, C + 5).Value = "已锁定" Else .Cells(I, C + 5).Value = "未锁定" '第6列填写锁定状态- Q3 I! b- d1 Q- w
            Select Case Ly.TrueColor.ColorMethod '检查颜色定义的方法
  Q8 w8 ~+ R+ w& d! h                Case 194 '该图层颜色定义为RGB颜色时,在第7列填写RGB颜色6 Q$ q) `3 v1 @0 X
                    .Cells(I, C + 6).Value = "RGB颜色" & Ly.TrueColor.Red & "," & Ly.TrueColor.Green & "," & Ly.TrueColor.Blue. a& b9 K* Z' Q3 N9 i$ @2 k$ F& B
                Case 195 '该图层颜色定义为索引颜色时
  U4 D$ g( O4 h( N                    Select Case Ly.TrueColor.ColorIndex
0 q9 ]+ {. s2 d( `+ y                        Case 1 '以下代码按索引号在第7列填写颜色名称
5 D) t; `+ ~/ o  P7 b8 z                            .Cells(I, C + 6).Value = "红"
. s6 u0 J3 Z. g# I                        Case 2% k; e# S& o: O$ K$ ]6 m( B8 o
                            .Cells(I, C + 6).Value = "黄"
3 c8 W) e& ?3 s! {0 {! y5 @- \% ?  ?                        Case 3
; ^- G+ e; k8 F( f9 C                            .Cells(I, C + 6).Value = "绿"
" j! N9 m9 L2 x8 ~                        Case 4
; r. p* O7 U+ r& I                            .Cells(I, C + 6).Value = "青"1 F9 ?* i" V8 r4 C; G
                        Case 5
. |4 }! V0 n/ V& y' d                            .Cells(I, C + 6).Value = "蓝"
# @: H, Y: ~1 ~9 w: u( f) m                        Case 6
& L3 e1 x1 N5 }$ F; a, `                            .Cells(I, C + 6).Value = "洋红"$ h: d) P' p5 J0 W3 U+ [  p
                        Case 7
. s/ e' q% |. _' P: y                            .Cells(I, C + 6).Value = "白"
  U" a$ z9 U1 u2 P7 y                        Case Else '无名称的索引颜色在第7列填写索引号
- F0 E/ t5 e" Y# x; N3 W                            .Cells(I, C + 6).Value = "索引颜色" & Ly.TrueColor.ColorIndex; c  p1 H% R8 F7 Y( R" }
                    End Select& R5 @8 T! f" h7 O- p' r/ k
            End Select8 R4 v1 l& Q% H- `5 X  g: G$ o* ~
            .Cells(I, C + 7).Value = Ly.Linetype '第8列填写线型名称
8 w5 V8 |6 W! S            Select Case Ly.Lineweight '第9列填写线宽
- I- U% M- q' E- M! X& F0 V                Case -3 '- k; l. f: w. Q
                    .Cells(I, C + 8).Value = "默认"2 W7 ~9 g& J& G" e$ ^
                Case Else
+ d1 z  L1 g- `" U                    .Cells(I, C + 8).Value = Val(Ly.Lineweight) / 1002 v' }! M7 _9 \4 A
            End Select
$ w" h% ~1 S, q1 m            .Cells(I, C + 9).Value = Ly.PlotStyleName '第10列填写打印样式名称  V7 U- X2 B7 U  {1 o% O
            If Ly.Plottable Then .Cells(I, C + 10).Value = "打印" Else .Cells(I, C + 10).Value = "不打印" '第11列填写是否打印" A1 ~5 O) I- p- w* o- Y; m
            .Cells(I, C + 11).Value = Ly.Description '第12列填写图层说明
" S8 _) q$ Y2 M, T, F        Next
  w1 G$ |6 q- R6 Z        .Range(.Cells(R, C), .Cells(I, C + 11)).Columns.AutoFit '最适合的列宽
6 r- x$ \# q6 g( L1 s% c& z    End With
9 L1 l: {  c6 r; c2 S& ]$ n) {. REnd Sub
$ A3 X7 h, h) _' C/ |'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
! u8 `( T' f; l% r: W
( A5 E+ F5 o' v1 e运行结果3 d* d7 f7 A1 b1 T
Untitled-1.gif

评分

参与人数 1三维币 +10 收起 理由
wsj249201 + 10 鼓励原创!

查看全部评分

发表于 2009-2-26 14:47:11 | 显示全部楼层 来自: 中国北京

真是太好了

感谢,楼主辛苦了
发表于 2009-3-21 20:46:02 | 显示全部楼层 来自: 中国黑龙江哈尔滨
谢谢楼主,参考了,我再试试VC++编这种程序
发表于 2009-3-24 22:00:19 | 显示全部楼层 来自: 中国江苏常州
谢谢楼主,参考了,厉害
发表于 2009-5-1 12:20:56 | 显示全部楼层 来自: 中国台湾
感谢楼主分享! Ding
发表于 2009-5-1 12:48:20 | 显示全部楼层 来自: 中国湖北武汉
这个都可以写出来,佩服。。
头像被屏蔽
发表于 2009-5-5 18:26:07 | 显示全部楼层 来自: 中国北京
提示: 该帖被管理员或版主屏蔽
发表于 2009-9-5 20:38:22 | 显示全部楼层 来自: 中国四川成都
很好。可以借用修改用于其他程序转化成excel输出。感谢lz。
发表于 2010-11-30 17:41:04 | 显示全部楼层 来自: 中国浙江杭州
不错不错  厉害
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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