QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
11天前
查看: 5026|回复: 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”运行。) Z! }$ l; M8 D4 O% x/ y
3 t" H1 _( {) Z) ?4 @
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''& V) J3 O: c; F1 Q8 I
Sub TC()" F# @$ O; l1 d% T! X6 n# T
    Dim R As Integer, C As Integer, I As Integer, Ly As AcadLayer9 j( f- x  R% Q- J# j5 u& l
    Dim xlApp As Excel.Application, xlBook As Excel.Workbook
4 t" [, U0 w  E: \, p2 N) R: X   
7 F9 K6 a: j8 m    R = 1: C = 1 '从工作表的第1行第1列开始填写,使用者自行更改
; u( q# o( s# T2 x5 P, W    & a- \0 t( F; E- U3 C3 @
    Set xlApp = CreateObject("Excel.Application") '打开EXCEL程序
' ]  Z' m6 z2 d* j    xlApp.Visible = True '使EXCEL程序可见! x/ k& u) c$ S" ~
    Set xlBook = xlApp.Workbooks.Add '插入新工作薄! t, a& e1 s( a& l# r$ U2 S
    With xlBook.ActiveSheet
4 |* D; a) }: ?1 K$ A/ `6 ]0 c* u  r+ ]        .Name = "图层信息" '重命名当前工作表
) o% [$ g1 j' j; {        I = R* k" v8 ^) b4 ?# V1 s+ K# X, l7 z
        .Range(.Cells(I, C), .Cells(I, C + 11)).HorizontalAlignment = xlCenter  '所有填写项目名称的单元格水平中心对齐
/ h( K  O( @, o! I3 s" h8 w- L* l        .Cells(I, C).Value = "序号"  '以下代码逐列填写项目名称
. y$ V/ V* t9 X        .Cells(I, C + 1).Value = "状态"
4 B; C5 L* k5 t+ y/ R9 E# R$ Y4 `, p        .Cells(I, C + 2).Value = "名称"8 l4 {& O' Q! U7 Y
        .Cells(I, C + 3).Value = "开关"
% V& J/ P. n' e; B        .Cells(I, C + 4).Value = "冻结"
5 ^. C1 Z& Y; g/ I# z% q        .Cells(I, C + 5).Value = "锁定"
, u5 V# e1 a0 n. N0 [2 J7 _) q        .Cells(I, C + 6).Value = "颜色") A* c) O% i) ]& G* q; w
        .Cells(I, C + 7).Value = "线型"5 D1 s' L: a, @6 h& G
        .Cells(I, C + 8).Value = "线宽"
8 U6 ^# Z, h, g6 R; I        .Cells(I, C + 9).Value = "打印样式"& U/ V& l  C$ }& V! e+ l
        .Cells(I, C + 10).Value = "打印"
% J: Y) y$ u( E, H# o5 R$ p        .Cells(I, C + 11).Value = "说明"
' C: x8 \3 V  ~$ a' ^        For Each Ly In ThisDrawing.Layers '遍历图层
& H# T& k" u% O9 v0 P/ R            I = I + 1 '在下一行填写该图层信息
% t/ I4 ^9 _! v            .Range(.Cells(I, C), .Cells(I, C + 10)).HorizontalAlignment = xlCenter  '前11项信息所在单元格水平中心对齐, K, i0 K; ~7 I% e/ @  l7 z
            .Cells(I, C + 11).HorizontalAlignment = xlLeft '填写图层说明的单元格水平左对齐
$ A7 h+ {& [' \0 R- B            .Cells(I, C).Value = I - 1  '在第1列填写序号
; c9 ^: Z6 v- U& L4 S0 j; E; S            If Ly.Used Then .Cells(I, C + 1).Value = "已使用" Else .Cells(I, C + 1).Value = "未使用" '第2列填写使用状态
2 ?" f1 R3 F5 Q' O/ g0 ^            .Cells(I, C + 2).Value = Ly.Name '第3列填写图层名称
- Y& Y0 a: B! a! ]* J6 N            If Ly.LayerOn Then .Cells(I, C + 3).Value = "开" Else .Cells(I, C + 3).Value = "关" '第4列填写开关状态2 A( J* {9 s! h" |( O
            If Ly.Freeze Then .Cells(I, C + 4).Value = "已冻结" Else .Cells(I, C + 4).Value = "未冻结" '第5列填写冻结状态
% R. C& \/ X+ W' O9 I0 R, Y/ i2 C$ E: V            If Ly.Lock Then .Cells(I, C + 5).Value = "已锁定" Else .Cells(I, C + 5).Value = "未锁定" '第6列填写锁定状态
+ }3 n- O7 [$ d; \  r; D            Select Case Ly.TrueColor.ColorMethod '检查颜色定义的方法9 B7 c+ Z  @* I5 y2 n5 V1 b6 J
                Case 194 '该图层颜色定义为RGB颜色时,在第7列填写RGB颜色& X" M& A$ ?+ [; F( y
                    .Cells(I, C + 6).Value = "RGB颜色" & Ly.TrueColor.Red & "," & Ly.TrueColor.Green & "," & Ly.TrueColor.Blue  v# e$ B) a+ z# g
                Case 195 '该图层颜色定义为索引颜色时8 y# s5 ~1 y- ^) O
                    Select Case Ly.TrueColor.ColorIndex
4 l0 \8 A- w; S/ D/ ^                        Case 1 '以下代码按索引号在第7列填写颜色名称
" n8 X" n; Z  [% t; I- w, b% I9 z                            .Cells(I, C + 6).Value = "红"' r4 I8 @$ N" `8 G
                        Case 2
8 x! D$ D' ], U; D5 n, e                            .Cells(I, C + 6).Value = "黄"; }8 J# H% g: o6 ~) v+ D
                        Case 3; S- F/ y9 v. j2 t0 \, z) y
                            .Cells(I, C + 6).Value = "绿"
7 k  L7 W3 C; m& `* @, ]: t+ s                        Case 4
4 c/ i7 M- v( t: ^7 D( x                            .Cells(I, C + 6).Value = "青"
( l' j! R5 H- Q1 _6 J                        Case 5. k! {- T. X  A% x. R9 L9 v
                            .Cells(I, C + 6).Value = "蓝"( b, ~2 c* T. _$ N1 P
                        Case 6
. V* g" k/ |% A( e5 w                            .Cells(I, C + 6).Value = "洋红"
) T' t; Z. H" Q& F" g' Y                        Case 7/ m. V9 I4 w9 z
                            .Cells(I, C + 6).Value = "白") l0 o- c! A8 B; M
                        Case Else '无名称的索引颜色在第7列填写索引号
% M+ h- t; Z( ^5 p                            .Cells(I, C + 6).Value = "索引颜色" & Ly.TrueColor.ColorIndex
9 ?1 a1 r* O, |. u9 v                    End Select
3 p* F/ ~' @5 R  ~. _            End Select
0 \$ x" e  P8 p# X0 j; b& Q9 w            .Cells(I, C + 7).Value = Ly.Linetype '第8列填写线型名称0 @+ u7 M/ W1 T; \6 x( w
            Select Case Ly.Lineweight '第9列填写线宽: u$ d9 C3 ]3 [* ?" z1 ]) v2 \4 n
                Case -3 '- I  w+ o: t0 k: z3 f( q4 L; s2 w# r
                    .Cells(I, C + 8).Value = "默认"3 e( }; m: s1 |& O- P' }
                Case Else
$ d0 P, e2 p7 U                    .Cells(I, C + 8).Value = Val(Ly.Lineweight) / 100
: E6 h% X, e# t            End Select
4 b& C& P3 E# Q$ T3 l" A            .Cells(I, C + 9).Value = Ly.PlotStyleName '第10列填写打印样式名称- A, f) G+ J! ^: p/ [/ \, \) \
            If Ly.Plottable Then .Cells(I, C + 10).Value = "打印" Else .Cells(I, C + 10).Value = "不打印" '第11列填写是否打印# Z6 J' t. K8 S/ {+ f$ _+ Q: z# }
            .Cells(I, C + 11).Value = Ly.Description '第12列填写图层说明8 ?1 f9 t* d" L$ h; |1 m
        Next
) \9 Q  Q  B9 R$ u        .Range(.Cells(R, C), .Cells(I, C + 11)).Columns.AutoFit '最适合的列宽
5 c$ v) o9 R& ^1 Q: Q    End With
3 t6 S9 f3 @; x/ `, {  G! P' VEnd Sub+ F7 \- C, A# m' K
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
& m; G6 w  \( u. b7 p
) `% ]3 I6 q% _( K) }运行结果
* K' g) d2 j! w$ K 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 )

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