乐筑天下

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

[编程交流] VBA-选择集

[复制链接]

9

主题

30

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 15:36:44 | 显示全部楼层
 
我已经试过了,但它只选择了一个动态块(我唯一不需要的一个),而没有选择图形中的其他两个动态块。
回复

使用道具 举报

19

主题

44

帖子

25

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
95
发表于 2022-7-6 15:42:33 | 显示全部楼层
 
这个线程非常有用;但我有一个后续问题。
 
如果要在过滤器中包含各种块名,是否必须在过滤器类型中包含相应的“2”?
 
换句话说,过滤器类型和过滤器数据数组的大小是否必须相同,或者其中一个(通常是过滤器数据)是否可以更大?
 
谢谢
回复

使用道具 举报

0

主题

89

帖子

147

银币

限制会员

铜币
-9
发表于 2022-7-6 15:43:17 | 显示全部楼层
奥尔哈多,
一个数组确实可以比另一个数组大。
 
 
你“准确地”用选定的块做什么?
回复

使用道具 举报

19

主题

44

帖子

25

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
95
发表于 2022-7-6 15:49:53 | 显示全部楼层
 
谢谢你的回复
 
这是个好消息,因为现在我可能不需要通过LISP和VBA之间的“用户”系统变量进行通信。
 
这就是我现在正在做的:
 
  1. Dim LowerLeft As Variant
  2. Dim UpperRight As Variant
  3. ' Get the Title Block Name defined from LISP routine
  4. blkName = Application.ActiveDocument.GetVariable("USERS1")
  5. On Error Resume Next
  6.    ThisDrawing.SelectionSets("GetTitleBlock").Delete
  7.    If Err.Number > 0 Then Err.Clear
  8.    Set ssetobj = ThisDrawing.SelectionSets.Add("GetTitleBlock")
  9.    gpCode(0) = 0
  10.    dataValue(0) = "INSERT"
  11.    gpCode(1) = 2
  12.    dataValue(1) = blkName
  13.    ssetobj.Select Mode:=acSelectionSetAll, FilterType:=gpCode, FilterData:=dataValue
  14.    For Each acEnt In ssetobj
  15.        acEnt.GetBoundingBox LowerLeft, UpperRight
  16.    Next acEnt
  17.    ReDim Preserve LowerLeft(0 To 1)
  18.    ReDim Preserve UpperRight(0 To 1)

 
所以,根据你刚才说的,我可以将“数据值”表示为:
 
  1. dataValue(1) = "TitleBlock1":dataValue(2) = "TitleBlock2":dataValue(3) = "TitleBlock2": etc

我需要这样做,因为我试图在标题栏的右下角插入一个块,然后打印它,然后删除插入的块。这意味着这些图纸是最终的。
回复

使用道具 举报

0

主题

89

帖子

147

银币

限制会员

铜币
-9
发表于 2022-7-6 15:52:26 | 显示全部楼层
不客气。
 
我想我理解你想做什么,然而,我觉得你把事情复杂化了一点。
 
在这种情况下,不需要使用Users变量,也不需要VBA与LISP通信。
 
您是否已经编写了一个试图与VBA模块结合的现有LISP例程?
 
毫升
回复

使用道具 举报

0

主题

89

帖子

147

银币

限制会员

铜币
-9
发表于 2022-7-6 15:56:20 | 显示全部楼层
很抱歉
我错过了这条评论。。
  1. 5

 
好的,让我们从头开始;使用VBA,您可以插入块,让选择集抓取最后插入的对象,在本例中是标题栏左下角的插入块;然后,我们可以进入打印部分,在我们为您完成该部分后。
 
然后,在打印后,可以从选择集中删除块;最后,我们将删除选择集。
 
如果你想进一步帮助,我需要你的标题栏的名称,它是否已经存在于图纸中?标题栏是否位于0,0,它是否会保留在那里?另外,您试图插入标题栏左下角的块的名称是什么?
 
如果我们可以做那么多工作,我们可以继续打印,这就是你将提示用户选择点的地方。
 
毫升
回复

使用道具 举报

0

主题

89

帖子

147

银币

限制会员

铜币
-9
发表于 2022-7-6 15:59:55 | 显示全部楼层
好吧,我假设你不再需要帮助了。
祝你好运
 
毫升
回复

使用道具 举报

19

主题

44

帖子

25

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
95
发表于 2022-7-6 16:03:20 | 显示全部楼层
对不起,没有回复你;但是,是的,我想我相信我有一个版本的代码,在LISP和VBA。
作为记录,我不能只使用“最后插入的对象”,因为标题栏通常是要插入的第一个对象之一。
此外,我最终只使用VBA设置打印选项,这主要是因为我对LISP有了更好的理解,并且能够更容易地找到块和边界。
谢谢你的提议。很抱歉,我不能接受你。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 21:04 , Processed in 0.407173 second(s), 77 queries .

© 2020-2025 乐筑天下

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