QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 5040|回复: 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”运行。
! i7 ]  r( F' F7 C$ q- S( H+ e! p; _  C* w, _0 d
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''3 I- n* ~( D6 N5 D0 y
Sub TC()
. Q# l) E1 g+ |    Dim R As Integer, C As Integer, I As Integer, Ly As AcadLayer- D7 t7 G" N" F/ [' Q
    Dim xlApp As Excel.Application, xlBook As Excel.Workbook
9 N# p" f9 W$ s. h( [8 h; _    3 M" _; i( X( c" K
    R = 1: C = 1 '从工作表的第1行第1列开始填写,使用者自行更改
' c: _, Q& s: B9 g. j9 U4 H   
  i! P: S' T& |* W    Set xlApp = CreateObject("Excel.Application") '打开EXCEL程序
2 o/ h* e: f# t/ r& w    xlApp.Visible = True '使EXCEL程序可见
4 [7 q- n# w$ x    Set xlBook = xlApp.Workbooks.Add '插入新工作薄& X2 ?0 ^; o8 X) X" A
    With xlBook.ActiveSheet
% @$ N* m" ?  d/ b$ T, {        .Name = "图层信息" '重命名当前工作表
+ t/ ^" a3 w$ a: U        I = R
  \4 F' w, A+ {) F5 m        .Range(.Cells(I, C), .Cells(I, C + 11)).HorizontalAlignment = xlCenter  '所有填写项目名称的单元格水平中心对齐" Q' v; F/ b- h$ k2 Y# B$ y/ A# z0 o
        .Cells(I, C).Value = "序号"  '以下代码逐列填写项目名称
  s" I( ?( d/ Z: B/ C' D7 B        .Cells(I, C + 1).Value = "状态". K; T% c" o: D; Y
        .Cells(I, C + 2).Value = "名称"
5 S7 e( J- {- S  Z, m        .Cells(I, C + 3).Value = "开关"1 q0 U( Y8 i0 z' {: u  d, N
        .Cells(I, C + 4).Value = "冻结") ~1 I& d) s2 z8 ^. c+ I+ Z+ g1 J
        .Cells(I, C + 5).Value = "锁定"
/ f: d+ ~+ J8 @* H3 L( P. l        .Cells(I, C + 6).Value = "颜色"2 E8 V- l3 Z4 r) k$ ]' m
        .Cells(I, C + 7).Value = "线型"
% ~. L7 `; C* \7 B/ D        .Cells(I, C + 8).Value = "线宽"
$ n- V; e3 I" p, K- T" j        .Cells(I, C + 9).Value = "打印样式"! {) p% j& l: p. f0 c& Q" d
        .Cells(I, C + 10).Value = "打印"
4 w& V4 ^3 V9 G" z  J* f        .Cells(I, C + 11).Value = "说明"
$ d) M7 s. {7 C        For Each Ly In ThisDrawing.Layers '遍历图层
: _% }! y- B) K- b            I = I + 1 '在下一行填写该图层信息8 H# z- F9 g  ~5 I8 c
            .Range(.Cells(I, C), .Cells(I, C + 10)).HorizontalAlignment = xlCenter  '前11项信息所在单元格水平中心对齐  z# E$ K' X0 x
            .Cells(I, C + 11).HorizontalAlignment = xlLeft '填写图层说明的单元格水平左对齐
1 K8 _& i3 g/ x4 q: _/ r; F9 [            .Cells(I, C).Value = I - 1  '在第1列填写序号
+ b" a6 z  i: }2 t. z            If Ly.Used Then .Cells(I, C + 1).Value = "已使用" Else .Cells(I, C + 1).Value = "未使用" '第2列填写使用状态) I0 Y/ s, q, p
            .Cells(I, C + 2).Value = Ly.Name '第3列填写图层名称
: d& W, y) K8 C5 \9 ^0 h            If Ly.LayerOn Then .Cells(I, C + 3).Value = "开" Else .Cells(I, C + 3).Value = "关" '第4列填写开关状态' Y1 T& }. s" Y% r  ^' Y6 L) f, e9 n7 V
            If Ly.Freeze Then .Cells(I, C + 4).Value = "已冻结" Else .Cells(I, C + 4).Value = "未冻结" '第5列填写冻结状态( b! |5 g0 s7 N1 c  ?
            If Ly.Lock Then .Cells(I, C + 5).Value = "已锁定" Else .Cells(I, C + 5).Value = "未锁定" '第6列填写锁定状态. d; |) X1 _/ x+ G! c
            Select Case Ly.TrueColor.ColorMethod '检查颜色定义的方法0 c1 J3 q& v: t
                Case 194 '该图层颜色定义为RGB颜色时,在第7列填写RGB颜色* v. K4 |9 `2 J* d7 o) T. F
                    .Cells(I, C + 6).Value = "RGB颜色" & Ly.TrueColor.Red & "," & Ly.TrueColor.Green & "," & Ly.TrueColor.Blue0 Y  T" R/ T. W; Y
                Case 195 '该图层颜色定义为索引颜色时
( b% y- N$ R8 u! f" x                    Select Case Ly.TrueColor.ColorIndex+ [0 F+ h! ]) H& n: T7 {+ y
                        Case 1 '以下代码按索引号在第7列填写颜色名称
7 ^- U; ^" ?: _. U                            .Cells(I, C + 6).Value = "红"
$ W: L) z' i+ R5 V                        Case 2$ a  u, b- d1 t) L9 Z
                            .Cells(I, C + 6).Value = "黄"0 l6 k! P& G6 B8 O) n6 ~8 ?
                        Case 30 G1 w$ C4 i! J
                            .Cells(I, C + 6).Value = "绿"
9 I2 N. M+ T% i8 W                        Case 4. `8 y$ i( E% q$ k% e
                            .Cells(I, C + 6).Value = "青"* L) G+ x, g. R& }0 r9 Y) [, L
                        Case 50 j/ W$ K$ H. m; Q
                            .Cells(I, C + 6).Value = "蓝"1 Y! |0 l& f7 F8 V3 Y
                        Case 6, c/ t5 y$ q# I- A8 K% P
                            .Cells(I, C + 6).Value = "洋红"2 l8 q) e) S6 w$ m/ H$ I
                        Case 7  H  g0 ?3 d5 u# }
                            .Cells(I, C + 6).Value = "白"
$ Q; J3 s8 s# U) k& a                        Case Else '无名称的索引颜色在第7列填写索引号
( B' S4 M7 W# s, [; T, \3 v                            .Cells(I, C + 6).Value = "索引颜色" & Ly.TrueColor.ColorIndex/ V, y# U  e& N' C4 A
                    End Select0 U# h0 ^1 T. p- ~0 Z
            End Select
4 H7 }/ E7 t2 R, f4 G            .Cells(I, C + 7).Value = Ly.Linetype '第8列填写线型名称
. g# f9 U/ o& x# k" V6 c' J            Select Case Ly.Lineweight '第9列填写线宽
! w/ F1 J8 p0 x9 U$ |7 V                Case -3 '; k4 m% l* T) j- k
                    .Cells(I, C + 8).Value = "默认"
. Y0 b" I# u2 ~                Case Else7 Z* n, B/ v1 G! v( ?
                    .Cells(I, C + 8).Value = Val(Ly.Lineweight) / 100
1 J* ]0 ^& D  N3 V5 V            End Select
8 {6 K# `: x2 L" k6 c            .Cells(I, C + 9).Value = Ly.PlotStyleName '第10列填写打印样式名称! W0 e8 V3 `3 s: I
            If Ly.Plottable Then .Cells(I, C + 10).Value = "打印" Else .Cells(I, C + 10).Value = "不打印" '第11列填写是否打印
% V  p% d! p$ a9 j            .Cells(I, C + 11).Value = Ly.Description '第12列填写图层说明) y- L/ U( b* P# v9 V
        Next
% [+ b6 T% G; g3 X. M        .Range(.Cells(R, C), .Cells(I, C + 11)).Columns.AutoFit '最适合的列宽
% T0 D) f- Q8 K4 t& Q2 x    End With
# ^) W" M/ B/ R" XEnd Sub
. W. {- Z8 Q4 b, `'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''3 c7 q1 E* w  x0 P% |, Q2 j
! d/ m. Q6 I$ m% B) r3 L# j
运行结果
9 _, @' M; e/ b# f" q 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 )

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