找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 596|回复: 8

[编程申请]:帮忙看一下一个图层的小工具

[复制链接]
发表于 2004-9-22 15:30:48 | 显示全部楼层 |阅读模式

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

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

×
我这里有个加后缀的小程序,麻烦斑竹帮我改一下,要求实现以下功能:
现有图层:
IDECK_WALL_01
IDECK_WALL_02
IDECK_WALL_03
等。。。
我想把WALL替换成DOOR,变成:
IDECK_DOOR_01
IDECK_DOOR_02
IDECK_DOOR_03
等。。。
总之,有点象WORD里面的替换功能。

Public Sub cmjz()

Dim laycount As Integer
Dim I As Integer
Dim Uplayer As AcadLayer
Dim JZ As String

JZ = ThisDrawing.Utility.GetString(False, "输入图层名后缀:")

laycount = ThisDrawing.Layers.Count - 1

For I = 1 To laycount
Set Uplayer = ThisDrawing.Layers(I)
Uplayer.Name = Uplayer.Name & JZ
Next I

End Sub


你说:Uplayer.Name = Replace(Uplayer.Name, "WALL", "DOOR")
可是我要的是个变量,因为具体改的内容不同,我不懂程序,斑竹帮一下忙把,劳驾了!*-*4

这次没贴错地方吧,这里应该是VBA区!

顺便问一下,VBA程序运行时,是不是只能按ALT+F8?能不能象画直线一样,设置一个命令缩写L?*-*4
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-9-22 20:41:42 | 显示全部楼层
这个应该行了
For Each Uplayer In ThisDrawing.Layers
    If Left$(Uplayer.Name, 10) = "IDECK_WALL" Then
        Uplayer.Name = "IDECK_DOOR_" & Right(Uplayer.Name, 2)
    End If
Next Uplayer
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-9-22 21:39:44 | 显示全部楼层
刚才翻了VB的书,终于搞定了。
Public Sub cmjz()

Dim laycount As Integer
Dim I As Integer
Dim Uplayer As AcadLayer
Dim JZ01 As String
Dim JZ02 As String

JZ01 = ThisDrawing.Utility.GetString(False, "输入想替换的原图层名字段:")
JZ02 = ThisDrawing.Utility.GetString(False, "输入想替换的新图层名字段:")

laycount = ThisDrawing.Layers.Count - 1

For I = 1 To laycount
Set Uplayer = ThisDrawing.Layers(I)
Uplayer.Name = Replace(Uplayer.Name, JZ01, JZ02)
Next I
End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-22 21:54:33 | 显示全部楼层
laycount = ThisDrawing.Layers.Count - 1
应该改为
laycount = ThisDrawing.Layers.Count
ThisDrawing.Layers是集合
不过还是鼓励自己动手完成
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-9-22 21:58:51 | 显示全部楼层
多谢斑竹鼓励,我会继续努力的。
不过,我的llaycount = ThisDrawing.Layers.Count - 1 这句话竟然没有抱错,程序正常执行了,完成了我要的功能,为什么?奇怪!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-22 22:00:53 | 显示全部楼层
肯定不会报错
你从第1个到第n-1个总共替换了n-1个,还少了一个,:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-9-22 22:12:27 | 显示全部楼层
对了,因为图层0是不要改的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-9-22 22:31:26 | 显示全部楼层
这些理论因为我没学过,也不是很懂。
但是我刚才运行测试过,-1以后没问题,除了图层0,其他满足条件的都改了;
但是没有-1的时候就出错了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-22 22:44:36 | 显示全部楼层
是我搞错了,我一直没用For i=
一直用的是For each i in ...
AutoCad的集合都是基于0的(怪怪的),而VB里的集合都是基于1的,搞混了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-29 07:22 , Processed in 0.372075 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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