[VBA]各种对象中的文字的替换方法。
有朋友提到的,如何在单行文字、多行文字、属性定义、属性引用(或参照)替换文字。Public Sub TextReplace()
'创建选择集,名称为TextReplace
Dim SSetObj As AcadSelectionSet
On Error Resume Next
Set SSetObj = ThisDrawing.SelectionSets("TextReplace")
If Err Then
Err.Clear
Set SSetObj = ThisDrawing.SelectionSets.Add("TextReplace")
End If
SSetObj.Clear
On Error GoTo 0
'创建过滤器,仅选择Text(单行文本)、Mtext(多行文本)、AttDef(属性定义)
'关于过滤器的详细使用资料,请参考有关书籍
Dim fType(0 To 0) As Integer
Dim fData(0 To 0) As Variant
fType(0) = 0
fData(0) = "Text,Mtext,AttDef"
'选择全部的Text、Mtext、AttDef
SSetObj.Select acSelectionSetAll, , , fType, fData
Dim i As Integer
If SSetObj.Count <> 0 Then
For i = 0 To SSetObj.Count - 1
'在Text和Mtext中显示的是TextString,在AttDef中显示的是TagString
If TypeOf SSetObj(i) Is AcadAttribute Then
If SSetObj(i).TagString = "ABC" Then SSetObj(i).TagString = "XYZ"
Else
If SSetObj(i).TextString = "ABC" Then SSetObj(i).TextString = "XYZ"
End If
Next
End If
'清空选择集中的数据,准备下一次操作
SSetObj.Clear
'创建过滤器,仅选择BlockRef(块引用)
fType(0) = 0
fData(0) = "Insert"
'选择全部的BlockRef
SSetObj.Select acSelectionSetAll, , , fType, fData
Dim v As Variant
Dim j As Integer
If SSetObj.Count <> 0 Then
For i = 0 To SSetObj.Count - 1
If SSetObj(i).HasAttributes Then
v = SSetObj(i).GetAttributes
For j = 0 To UBound(v)
'在BlockRef中的AttRef中显示的是TextString
If v(j).TextString = "ABC" Then v(j).TextString = "XYZ"
Next
End If
Next
End If
SSetObj.Clear
SSetObj.Delete
Set SSetObj = Nothing
End Sub
best 谢谢efan2000替我成功解答!
请问用VB怎么实现替换一个文件夹内中所有图形,最好是生成一个EXE文件,谢谢!!! 不错!! If SSetObj(i).HasAttributes Then '在选择集的对象中,这个属性代表却好象没有?
v = SSetObj(i).GetAttributes
For j = 0 To UBound(v) ’UBOUND()的用法是什么?什么意思呢?
If v(j).TextString = "ABC" Then v(j).TextString = "XYZ"
Next
End If
还望指教。 不是选择集的, SSetObj(i),也即SSetObj.Item(i)的意思,代表选择集中的一个实体,而之前使用了过滤机制,只选择块,因而这个实体就是块引用对象。HasAttributes是块引用对象的属性,没有异议了吧。
UBound是取数组范围的上限,LBound是取数组范围的下限,一般数组的下限是从0开始的,那么数组的元素个数应该就是UBound(v)+1,如果不是从0开始的,则是UBound(v)-LBound(v)+1。 谢谢指教,这次明白了。:) 我有一问题,如果我只想替换掉“ABC”中的“AB”,在批量替换条件下,该怎样实现呢。 这只是字符操作的问题,自己可更改为任意形式。
如:
If v(j).TextString = "ABC" Then v(j).TextString = "XYZ" & Mid(v(j).TextString, 3) 哈哈 又学了一着啊
页:
[1]
2