VBA选择集属性R(&S)
大家好,我正在尝试创建一个宏来更新AutoCAD图形-只需选择文字、多行文字、直线并修改其属性,如线宽、文字大小、文字样式。
因此,我的图形包含线条、文本或多行文字和属性引用-这些文件是未来的块。
一切都很好,我相信我很快就要完成了,但有一件事引起了问题。
当我试图选择属性引用并修改其文本高度时,就会出现问题。我不知道如何选择它们。我试着设置
FilterTypeText(1) = 2
FilterDataText(1) = "*"
For Each entity In sstext
entity.color = acByLayer
entity.Height = 3.5
Next
但它会选择一些无法修改文本高度的实体-没有这样的属性,我得到了一个错误。
现在我把
下一个错误将继续,但要解决这个问题。
请参阅下面的代码。
Sub UpdateBlocks()
Dim sstext As AcadSelectionSet
Dim FilterTypeText(3) As Integer
Dim FilterDataText(3) As Variant
Dim tsObject As AcadTextStyle
Dim ent As AcadEntity
Dim ssall As AcadSelectionSet
Dim layer As AcadLayer
Dim entity As AcadEntity
On Error Resume Next
'set acwhite for each layer in the drawing
For Each layer In ThisDrawing.Layers
layer.color = acWhite
Next
'set all text styles
For Each tsObject In ThisDrawing.TextStyles
tsObject.fontFile = "SIMPLEX.shx"
tsObject.Width = 0.8
tsObject.Height = 3.5
Next
'select all entities and change the lineweight and color
Set ssall = ThisDrawing.SelectionSets.Add("SelectAll")
ssall.Select acSelectionSetAll
For Each ent In ssall
ent.Lineweight = acLnWt000
ent.color = acByLayer
Next
ssall.Clear
ssall.Delete
'select and change all text and Mtext
Set sstext = ThisDrawing.SelectionSets.Add("SelectText")
FilterTypeText(0) = -4
FilterDataText(0) = ""
sstext.Select acSelectionSetAll, , , FilterTypeText, FilterDataText
For Each entity In sstext
entity.color = acByLayer
entity.Height = 3.5
Next
sstext.Clear
sstext.Delete
'need select all the block attributes and move them to the standard text style or at least modify the size and textstyle
ThisDrawing.Application.ActiveDocument.PurgeAll
End Sub
非常感谢您的帮助,
彼得
嗨Xpeter88
在开始时,您声明“3”为FilterTypeText和FilterDataText向量的上限(即,它们将有4项),但在设置过滤器时,您只设置其第2项(索引“1”-这些向量是基于零的向量。这会导致错误。
在调试时,您最好始终避免使用“出错时继续下一步”指令,以便至少了解错误的来源。
此外,即使向量上界和索引(均为“0”)设置正确,根据您的选择标准,您也可以获得图形中的所有对象,因为您按名称(组码=2)过滤,但随后接受每个名称(值=“*”)。
相反,要选择所有文本和多行文字,可以按如下方式设置过滤器
当作用于与插入的块引用相关联的属性引用时,可以如下操作
1) 选择所有块参照
然后迭代选择集并对具有属性的项进行操作
5 你好
谢谢你的回复。我做了一个测试,效果很好,但我要找的是选择一个阿曲布他定义,并修改它,这不是一个块的一部分(尚未)。
因此,这些属性定义不在块内。原因是“块”(我们可以称之为图形)库不包含任何块,只包含行、属性定义、文本和多行文字。这些图形一旦插入到图形中,就会转换为块,我正在尝试在它们成为块之前修改这些实体。
e、 g.如果在命令行中键入命令“attdef”并将其放入图形中,则这是属性定义,但尚未作为块的一部分。
希望清楚:)
因此,我认为下面的代码必须定义得有所不同。
gpCode(0)=0
数据值(0)=“插入”
我只是无法在活动图形中选择这些att定义。
顺便说一句,谢谢你的第一个选择集(3),是的,有一个失误:)
有什么想法吗?
彼得 我现在不在我的CAD计算机上,但我认为如果您使用:
gpCode(0)=0
数据值(0)=“ATTDEF”
它应该只拾取属性定义。 是的,没错。我知道我很接近,但我真的没有想到这一点。我还在学习VBA。
谢谢你们,gyus,你们真的帮了我。
祝您有个美好的一天!
彼得 随着VBA被淘汰,你可能想考虑去VL或。net,所以不要被发现代码不工作。
这可能有用
6 我知道,但为了这个目的,这就足够了。这段代码只是我在VBA中已有的另一段代码的一部分(它从excel中读取记录,打开图形,
更改属性值+此新部件将更新文本大小、颜色、线条。
我正在学习。NET,可能它们会被重新写入。NET,但我现在不能这样做,因为步骤和语法与VBA有点不同。
至少我会在VBA中有工作代码,工作正常,并且可以利用它的步骤将其重写为。净额
顺便说一句,当我们开始谈论。NET我知道有一个代码可以将VBA传输到。净额。你有没有任何到期日,如果它工作或它更好地完全重写它手动。 谢谢你的这段代码,我一到笔记本电脑就会试试。
Autodesk Tech Dev的Kean Walmsley和他的团队制作了一个神奇的宏,可以将VBA代码转换为VB。NET,但根据VBA代码的质量,它会产生不同的结果。它还将VB6表单转换为。NET,但这里也有局限性。当我上次使用它时,你必须在VB中打开由魔术宏生成的代码。NET 2008保存项目,然后在VB的更高版本中打开它。您正在使用的NET。我认为VB。如果您需要,NET 2008 Express仍然可以免费下载。我使用它的经验是,当你把代码放到VB中时,有时需要进行大量的调试。NET和表单上的某些VBA控件在中不可用。净额。对于较小的VBA项目,确实不值得所有的努力来使用转换器,对于较大的项目,让它运行起来也是一项艰巨的任务。如果您想进一步调查,请观看此视频:
http://download.autodesk.com/media/adn/VBA_Migration/DevTV_Recording/VBA_Migration.html
我现在要么写代码。NET或VBA,甚至不考虑使用转换器。正如Autodesk不再支持VBA6,但在AutoCAD 2014中引入了VBA7,该版本在表单上使用64位控件一样,32位控件也不再受支持。还有其他区别,这意味着在VBA6中编写的代码不一定在VBA7中运行。虽然Autodesk表示,他们将继续在Autodesk产品的未来版本中支持VBA7,但他们只会在Microsoft支持VBA的情况下这样做,并且这一点在未来任何时候都可能发生变化。不存在此类问题。NET,因此我建议您更改为Visual Studio语言之一,而不要使用VBA编写新代码。VBA代码总是需要维护的,可能还有一些对现有代码的增强,所以不要把VBA完全排除在外。 小家伙,谢谢你的意见。目前,我不需要将VBA传输到。但是我正在学习VB。NET约定,所以我未来的代码可能会在VB中完成。NET以避免任何其他问题。
页:
[1]