乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 84|回复: 7

根据多个名称测试块名称

[复制链接]

28

主题

249

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
361
发表于 2006-1-5 18:51:54 | 显示全部楼层 |阅读模式
我知道如何做到这一点是lisp,但我的lisp文件有问题,所以我发现这可能是自学VBA的好时机。我正在为一个块占用纸张空间(Layout1),它可能是六个名称之一。
我该怎么做?
我是否会将变量设置为变体,然后测试对象?
感谢您提前提供任何帮助。只是在寻找推力。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

28

主题

249

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
361
发表于 2006-1-5 19:09:01 | 显示全部楼层
所以你是说我必须测试每一种可能性?如果是这样,我可以这样做,因为无论它匹配哪个块名,我都必须做同样的事情。你正在做的事情看起来像是...lisp中的函数。我能把它写成一个if或语句吗?
If或Obj。名称是“标题-A”或Obj。名称为“标题-B”等.....?
谢谢你的帮助。
回复

使用道具 举报

28

主题

249

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
361
发表于 2006-1-5 19:14:00 | 显示全部楼层

  1. Public Sub SearchForBlock()
  2.     Dim pEnt As AcadEntity
  3.     Dim pBlkRef As AcadBlockReference
  4.    
  5.     For Each pEnt In ThisDrawing.PaperSpace
  6.         If TypeOf pEnt Is AcadBlockReference Then
  7.             Set pBlkRef = pEnt
  8.             Select Case UCase(pBlkRef.Name)
  9.                 Case "NAME1", "NAME2", "NAME3", "NAME4", "NAME5", "NAME6"
  10.                     ' Do something here...
  11.             End Select
  12.         End If
  13.     Next
  14. End Sub

干杯,格伦。
回复

使用道具 举报

28

主题

249

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
361
发表于 2006-1-5 19:25:11 | 显示全部楼层
在VBA中,您只需要在使用Object时使用Set。任何其他类型,您只需使用
var="Layout1"

var=2.0
即可返回函数的结果:
  1. Private Function GetTitleBlock() As Variant
  2. Dim LayoutCol As AcadLayouts
  3. .....whatever
  4. ....more whatever
  5. GetTitleBlock = AttVar
  6. End Function

然后在另一个Sub/Function中,您可以这样调用它:
  1. OtherSubAttvar = GetTitleBlock

您也可以这样传递要搜索的布局:
  1. OtherSubAttvar = GetTitleBlock("Layout1")
  2. ''and change the Function to this, remove the Dim Layout Name from the function
  3. Private Function GetTitleBlock(LayoutName as String) As Variant

回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2006-1-5 19:37:36 | 显示全部楼层
因此,使用Glenn的例子:
  1. Public Function SearchForBlock(LayoutName As String) As Variant
  2.     Dim pEnt As AcadEntity
  3.     Dim pBlkRef As AcadBlockReference
  4.     Dim Space As AcadBlock
  5.     Dim AttVar As Variant
  6.    
  7.     Set Space = ThisDrawing.Layouts.Item(LayoutName).Block
  8.     For Each pEnt In Space
  9.         If TypeOf pEnt Is AcadBlockReference Then
  10.             Set pBlkRef = pEnt
  11.             Select Case UCase(pBlkRef.Name)
  12.                 Case "TDG", "NAME2", "NAME3", "NAME4", "NAME5", "NAME6"
  13.                     AttVar = pBlkRef.GetAttributes
  14.             End Select
  15.         End If
  16.     Next
  17.     SearchForBlock = AttVar
  18. End Function

回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2006-1-5 19:42:25 | 显示全部楼层
感谢 Glen 的初始代码,并感谢 Jeff 的解释。 我认为这将是一段漫长而崎岖不平的道路。 不过,这应该让我开始。 如果可以的话,还有一个问题。
你为什么在这里的末尾加上“作为变体”? 我也会在帮助中寻找,只是觉得你可以告诉我比我在帮助中找到它更容易。
回复

使用道具 举报

28

主题

249

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
361
发表于 2006-1-5 19:44:50 | 显示全部楼层
函数始终向调用方返回值。
在本例中,返回值
是一个变量。
因此,在这种情况下,局部变量  SearchForBlock = AttVar 期望分配一个 Variant TYPE 值以进行返回。
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2006-1-5 19:55:35 | 显示全部楼层
好的。我明白了。谢谢克里,这很有意义。
去尝试学习更多的东西。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-5 01:21 , Processed in 1.233358 second(s), 68 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表