找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: efan2000

[VBA程序]:Excel表格到CAD的示例程序

[复制链接]

已领礼包: 181个

财富等级: 日进斗金

 楼主| 发表于 2003-9-25 19:45:03 | 显示全部楼层
这是由于在AutoCAD中显示的和Excel中的效果不一样,同样大小的文字,比如12磅的宋体,在AutoCAD就会比Excel中显示的大一点。碰到这种情况,应该加上一个修正系数。比如:宽度系数设为0.8,高度系数设为0.9,这样显示的就和Excel中比较接近。高度加系数是在mTextObj.Height = PToM(xlRange.Font.Size)这一句,而宽度加系数要在文字样式中设置。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-9-26 15:47:33 | 显示全部楼层

啊哈,看来老师不少

俺是初学者
但俺很想用VBA编程
请efan2000斑竹及各位老师们今后多多关照多多指教,呵呵*-*b *-*5 *-*6 *-*4 *-*1
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-9-27 20:59:12 | 显示全部楼层

efan2000斑竹:再次请教。。。

If xlRange.Borders(xlEdgeLeft).LineStyle <> xlNone And xlRange.Column = 1 Then
        pPt(0) = iPt(0) + rl: pPt(1) = iPt(1) - rt
        pPt(2) = iPt(0) + rl: pPt(3) = iPt(1) - (rt + rh)
        Set pLineObj = BlockObj.AddLightWeightPolyline(pPt)
    End If
    If xlRange.Borders(xlEdgeBottom).LineStyle <> xlNone And (xlRange.Row = xlRange.MergeArea.Row + xlRange.MergeArea.Rows.Count - 1) Then
        pPt(0) = iPt(0) + rl: pPt(1) = iPt(1) - (rt + rh)
        pPt(2) = iPt(0) + rl + rw: pPt(3) = iPt(1) - (rt + rh)
        Set pLineObj = BlockObj.AddLightWeightPolyline(pPt)
     End If
    If xlRange.Borders(xlEdgeRight).LineStyle <> xlNone And (xlRange.Column >= xlRange.MergeArea.Column + xlRange.MergeArea.Columns.Count - 1) Then
        pPt(0) = iPt(0) + rl + rw: pPt(1) = iPt(1) - (rt + rh)
        pPt(2) = iPt(0) + rl + rw: pPt(3) = iPt(1) - rt
        Set pLineObj = BlockObj.AddLightWeightPolyline(pPt)
     End If
    If xlRange.Borders(xlEdgeTop).LineStyle <> xlNone And xlRange.Row = 1 Then
        pPt(0) = iPt(0) + rl + rw: pPt(1) = iPt(1) - rt
        pPt(2) = iPt(0) + rl: pPt(3) = iPt(1) - rt
        Set pLineObj = BlockObj.AddLightWeightPolyline(pPt)
     End If
如果在ecxcel绘制的表格起始格不是在第1行第1列,那么按照程序的意思不是就不去在cad里绘制top边和left边呢吗?如图所示,下图是我执行的结果,不知对不对,还请efan指点。谢谢!
f:\asdq.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

 楼主| 发表于 2003-9-27 21:09:06 | 显示全部楼层
不是,程序中判断第一行的左边如果有边框时就绘制,而第一列的上边有边框时也要绘制。对于其它的行和列呢,它们的左边是同一行的前一个单元格的右边。而上边就是同一列的前一个单元格的下边,因而,为了避免重复绘制边框,而省略了。所以它们只判断右边和下边。xlRange.Row = xlRange.MergeArea.Row + xlRange.MergeArea.Rows.Count - 1,xlRange.Column >= xlRange.MergeArea.Column + xlRange.MergeArea.Columns.Count - 1这两个条件用来判断是否包含合并单元格.。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-9-27 21:34:56 | 显示全部楼层

efan2000在呀,太好了!

程序中:绘制边框
。。。。
rw = PToM(xlRange.Width)
  rh = PToM(xlRange.Height)
。。。。
同  绘制文字
。。
rw = PToM(xlRange.MergeArea.Width)
rh = PToM(xlRange.MergeArea.Height)
。。。
的区别是什么?在边框里是加入MergeArea可以吗?
我查MergeArea有关的属性说明不多,所以不太了解,efan能说说吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

 楼主| 发表于 2003-9-27 22:07:38 | 显示全部楼层
两者不同的原因在于For each的用法,它的顺序是按行从左到右一个单元格一个单元格的搜索,而并不处理合并单元格,也就是遇到合并单元格不跳过。对于边框,都是按单元格的宽度和高度,也就是即使是合并单元格也是分开绘制的。而对于文字,如果碰到合并单元格时,它的宽度和高度应该是总的单元格区域的宽度和高度,这样设置对齐时才不会跑到外边去。
MergeArea是返回合并单元格区域的对象,判断一个单元格是否属于合并单元格区域之中,可以使用MergeCells属性。比如:Range("A1").MergeCells=True表示A1单元格是合并单元格区域中的一个单元格,而返回这个合并单元格区域就使用Range("A1").MergeArea,如它的区域是A1:C3。因而Range("A1").MergeArea.Width就是A1:C3总的宽度了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-9-29 19:33:44 | 显示全部楼层

efan斑竹:怎么设置尺寸呢?

excel表格中单元格的列宽和行高的长度单位 ,单元格标准列宽为8.38,标准行高为14.25。可是看上去行高却比列宽短呀???!!!还有它们单位是什么?怎么和毫米换算呀??
2。excel中的文字大小,比如字号为12的是什么单位呀?
   因为我在cad中需要知道各个单元格的边长,因此必须要进行换算。可是列宽的长度单位好像不是磅。
   在其它帖子里看到有关这方面的信息,可是跟没说一样,我需要的是能够具体的换算。
   谢谢!

http://www.xdcad.net/forum/showthread.php?s=&threadid=76922
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

 楼主| 发表于 2003-9-29 20:44:35 | 显示全部楼层
行高的单位是磅,使用RowHeight和Height的返回的就是磅单位。列宽的单位是字符,使用ColumnWidth返回的是字符,而使用Width返回的就是磅。所以行高和列宽的比较应该通过Height和Width。字符是以12号字的0-9数字之间取平均值。要与毫米的换算,通过Excel的内部函数PointsToCentimeters吧,不知道拼写有没有错误。
根据资料,Excel中的文字也是磅的单位,通常所称的点的值跟磅是一样的。但是,文字转换到ACAD后,与单元格的尺寸相比较,往往感觉比较大,这个就不知道其真正的原因了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-9-29 22:27:13 | 显示全部楼层

非常感谢efan斑竹!!!

像efan斑竹既博学又肯帮助别人的斑竹不多!尤其对efan答解问题时的详细印象非常深刻!谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-10-3 01:36:13 | 显示全部楼层
如果excel中的数字是小数,在excel的单元格式中保留两为,那传入cad中小数的位数与excel中不一致,这个问题怎么解决?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-11-20 09:03:24 | 显示全部楼层
最初由 frank 发布
[B]如果excel中的数字是小数,在excel的单元格式中保留两为,那传入cad中小数的位数与excel中不一致,这个问题怎么解决? [/B]


读取单元格的"Text"属性,就不用考虑这个问题了,如:
   MsgBox Cells(1,1).Text
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-11-20 15:49:01 | 显示全部楼层
斑竹,可以把cad中的图形和文字导到excel 中吗,导过去的东西不想粘贴过去那样是黑底的;而且可以在 excel中编辑图片大小
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-11-20 21:04:22 | 显示全部楼层
efan 确实是高手,帮我解决了不少难题。不知道你得vba只是从哪学到的,有没有电子版的vba教程,给个连接好吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

 楼主| 发表于 2003-11-20 22:50:34 | 显示全部楼层
最初由 lilinyang 发布
[B]斑竹,可以把cad中的图形和文字导到excel 中吗,导过去的东西不想粘贴过去那样是黑底的;而且可以在 excel中编辑图片大小 [/B]


Excel中的图形只支持图像格式,而CAD的图本身就不是图像,所以不能直接转,必须先将CAD的图转换成图像,再粘贴到Excel中。
而对于文字,两者是一样的,不过导到Excel中需要一定的格式,而怎么转化就要看自己的需要了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

 楼主| 发表于 2003-11-20 22:55:57 | 显示全部楼层
最初由 god 发布
[B]efan 确实是高手,帮我解决了不少难题。不知道你得vba只是从哪学到的,有没有电子版的vba教程,给个连接好吗? [/B]


说实话,我是自学的,以前编程的时候,根本没有想过还有论坛,还能有地方提问题,还有人帮你解答。自己就整天啃着书本和帮助文件。
VBA教程,现在R2004中文版带的开发人员指南就是很多的学习资料,因为是ACAD本身带的,也是比较正规的。而对象参考引用部分就是介绍一些对象的属性、方法的用法,找本书翻翻,只适用于查找资料之用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-25 03:00 , Processed in 0.468537 second(s), 53 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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