找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 275|回复: 2

[原创]:初学者遇到的一些问题和bug

[复制链接]
发表于 2005-5-18 16:07:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
这些问题都是近来学用vba遇到的,不算什么新东西了。对自己这段时间的学习和应用做个总结吧。有些甚至不算bug,但是很容易弄错或忘掉。有些可能是因为不同的机器设置导致。因为我调试程序用过的电脑很多。
总之给大家提个醒吧,出了问题有可能会是出现以下情况。
小弟初发,欢迎大家指正!

1  关于选择集selectionset

1)   选择集只能选中目前视图中已有的东西。因此,如果用到
select方法,且mode为 acSelectionSetWindow 或acSelectionSetCrossing
最好先Zoom一下。比较准确。
如: ThisDrawing.Application.ZoomWindow corner2, corner1
     ssetObj.Select acSelectionSetCrossing, corner1, corner2
有人问为什么不Zoom All. 我试了很多次发现,Zoom all后对于很大的图上选很小的区域会出现偏差。选不中或者选错都有。当时真是大晕。

2)  上述selectionset的cor1,cor2. 仔细看帮助文档后发现,它用到的点
一定要用 dim a(0 to 2 ) as double 的形式。
但是,很多时候vba里面取得图形的某点是用 variant 变量的。这个转化就不可少。  

如:dim point1,point2 as variant
    dim p1(2) as double
    dim p2(2) as double
    Block1.GetBoundingBox point1, point2
  p1(0)=point1(0)
    p1(1)=point1(1)
    p1(2)=point1(2)
    p2(0)=point2(0)
    p2(1)=point2(1)
    p2(2)=point2(2)
    ssetObj.Select acSelectionSetCrossing, p1, p2
  
2   常数
    vba中有各种定义好的常数。如上例中的
    acSelectionSetCrossing。我们一般不关心它究竟等于多少,直接写成上述形式就可以了。
    但是,我就遇到过 跟踪器里显示acSelectionSetCrossing=0 的情况。
    不知道为什么,vba系统没有把该常数转换成对应数值,而是当作未定义的变量来处理。所以大家还是稳妥点直接写数字为好。
    类似情况见下文

3         关键字
    同上,也会被当作变量处理。
例如 vb中有个语句 NAME 。对文件更改名称用的。
有次我发现vba将其看作变量,并赋值  "ACAD"

----更正---- NAME在vba里是属性。与vb的NAME语句冲突。


  
4   顺便建议大家:
    vba里文件操作有两套手段。一套是用最早的basic的解决方法,全套语句。
如 打开是open,关闭 close。写入write,读出input等。
    另一套是创建一个file的object.上述动作等转化为object对应的属性和方法。
    前者简单,后者麻烦一点点。
    但是还是建议用后者吧。出问题的可能性少很多。比如刚才的NAME......

5   Insertionpoint 问题
    无论是BlockRef,还是Text,MText,都有一个Insertionpoint属性。记录了它在图形中的插入点坐标。
    这个属性在编辑器里查看,都是
    Insertionpoint--
             Insertionpoint(0)=...
             Insertionpoint(1)=...
             Insertionpoint(2)=...
    的形式。但是,千万不要以为它是数组。
    试图用数组的形式调用它是无效的。必须定义一个variant变量。
    dim a as variant
    a=Block1.InsertionPoint
    顺便说下,vba里属性很多都要用variant类型的变量才能取得。而方法或者函数中的参数都要用double类型的数组。这个转换是必须进行的。

6   文档级事件
    Endplot事件,在打印对话框选择"确定"与"取消"的情况下,都会被触发
    而且,如果用命令行执行 "-plot",一路执行下去。
    即使最后选择 “不继续打印”,打印相关的各个事件  startplot endplot startcommand endcommand 均触发。
    请大家留意。

7  应用程序级事件
   SysVarChanged 这个事件。在系统变量值改变时触发。
   但是不是所有系统变量都触发该事件的。
   只有人工改变系统变量值的行为才触发它。
   同时,只要有“行为”,哪怕该值并没有真正改变,也会触发它。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-5-18 21:49:26 | 显示全部楼层
3、Name并不是常量,而是属性,在ThisDrawing模块内表示ThisDrawing.Name,在一般模块内表示Application.Name
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-19 08:39:47 | 显示全部楼层
怪不得呵呵。
可是它也确实是vb里的一条语句啊,虽然老了点。
已按版主意见修改帖子。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-29 01:29 , Processed in 0.413571 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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