找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 746|回复: 5

[VBA程序]:请帮我看一下这段程序

[复制链接]
发表于 2003-5-18 12:42:50 | 显示全部楼层 |阅读模式

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

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

×
大家好,最近写了个小程序,在使用过程中出现了一些问题,期望得到大家的帮助,下面是程序。

  1.   [FONT=courier new]
  2. Sub lc()
  3. Dim ss As AcadSelectionSet
  4. Set ss = GetSelSet
  5. Dim ent As AcadEntity
  6. Dim lc As Double
  7. Dim SF As Double
  8. Dim tx As String
  9. Dim sa As Boolean
  10. Dim i As Integer
  11. i = 0
  12. sa = False
  13. Dim Obj As AcadEntity
  14. For Each ent In ss
  15.      If TypeOf ent Is AcadEntity Then
  16.         i = i + 1
  17.         Set Obj = ent
  18.         If sa = False Then
  19.            SF = Obj.LinetypeScale
  20.              On Error GoTo errtap
  21.              lc = ThisDrawing.Utility.GetReal("输入新的线型比例<" & SF & ">:")
  22.                If i = 1 Then
  23.                  ThisDrawing.Utility.InitializeUserInput 0, "Y N"
  24.                    If Err Or tx = "" Then
  25.                      tx = "Y"
  26.                      End If
  27.                     If tx = "Y" Then
  28.                     sa = True
  29.                 End If
  30.             End If
  31.          End If
  32.         ent.LinetypeScale = lc
  33.        End If
  34.     Next
  35. errtap: Exit Sub
  36. End Sub

  37. Function GetSelSet() As AcadSelectionSet
  38.     Dim ss As AcadSelectionSet
  39.     Set ss = ThisDrawing.PickfirstSelectionSet
  40.     On Error Resume Next
  41.     If ss.Count = 0 Then
  42.         Dim ssName As String
  43.         ssName = "strSSet"
  44.         On Error Resume Next
  45.         Set ss = ThisDrawing.SelectionSets(ssName)
  46.         If Err Then Set ss = ThisDrawing.SelectionSets.add(ssName)
  47.         ss.Clear
  48.         ss.SelectOnScreen
  49.     End If
  50.     Set GetSelSet = ss
  51.     ThisDrawing.SetVariable "filedia", 1
  52. End Function

  53.   [/FONT]

问题如下:1.在使用过程中会自动修改filedia的变量植为“0”
          2.在使用一定时间后程序就不在起作用,这是最烦人的地方
          3.目前只能是先执行程序在选择对象,请问怎样做到先选择后执行程序
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 181个

财富等级: 日进斗金

发表于 2003-5-18 22:29:42 | 显示全部楼层
1、If TypeOf ent Is AcadEntity Then[/COLOR],在选择集中的实体肯定是AcadEntity类型的,那么If TypeOf ent Is AcadEntity Then这一句就是多余的。
2、Dim lc As Double[/COLOR],过程名称已经使用了lc,那么过程内部的局部变量lc就不能再声明和使用了。
3、ThisDrawing.Utility.InitializeUserInput 0, "Y N"[/COLOR],既然用户需要输入的仅仅是实数,那么这一句就没必要。
4、lc = ThisDrawing.Utility.GetReal("输入新的线型比例<" & SF & ">:")[/COLOR],当用户选择的实体是多个时,并且各个实体的线型比例可能不完全相同时,那么这个默认的值以哪个为准。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-19 12:37:29 | 显示全部楼层
GetSelSet() 中两句
On Error Resume Next
重复

1.在使用过程中会自动修改filedia的变量植为“0”
你是否有其它的程序对filedia有赋值
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-5-19 21:34:48 | 显示全部楼层
多谢efan斑竹的指点,你的第二个观点是不是引起程序运行几次在运行就产生不了效果的原因等我明天到办公室调试一下在看看吧,因为当时这样写也是图方便,在执行过程中并没有报出过程名和变量名同名的错误。第三条原来我已经注释掉了,第四个是我没想到的,因为当选择了多个不一样线型比例的实体时它会返回第一个被框选的实体的线型比例值。
其实这个程序也只是写来玩的,在使用过程中没想到会有那么多问题,filedia变量值的自动修改是不知道怎么回事了,因为使用时只调用了这一个程序。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

发表于 2003-5-19 22:04:46 | 显示全部楼层
过程名称和变量名称相同的时候,主要是用于递归算法当中,如阶乘。
程序对filedia应该没有影响,我在R2000下运行并没有变更它的值。
先选择后执行程序可以用PickfirstSelectionSet获取,但是它经常会出现自动清除掉已经选择的实体,特别是在过程当中先执行其它代码时,更好的是通过AcadDocument对象的BeginShortcutMenuEdit事件来操作,但是它只用于右键菜单中。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-5-20 17:59:26 | 显示全部楼层
今天找到了程序运行中失效的一个问题,就是在一个文档中操作时,如果此时执行open命令,并取消打开文档,然后在运行本程序就会产生只选择而无法执行更改线形比例的程序代码。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 12:13 , Processed in 0.404956 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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