如果没记错的话,不能改text的font,只能改该text所属的textstyle的fontfile。
For I = 0 To ActiveDocument.TextStyles.Count - 1
Select Case ActiveDocument.TextStyles.Item(I).Name
Case "KADER35", "KADER50", "HELVL", "ST1", "ISO2_5"
ActiveDocument.TextStyles.Item(I).fontFile = Application.Path & "\fonts\txt.shx"
Case Else
End Select
Next I
同样问题哈。以下是我的代码
Sub ChangeFontWidth()
Dim I As Integer, J As Integer, K As Integer
Dim varAttributes As Variant
Dim ssetObj As AcadSelectionSet
For I = 0 To ActiveDocument.TextStyles.Count - 1
Select Case ActiveDocument.TextStyles.Item(I).Name
Case "KADER35", "KADER50", "HELVL", "ST1", "ISO2_5"
ActiveDocument.TextStyles.Item(I).fontFile = Application.Path & "\fonts\txt.shx"
Case Else
End Select
Next I
Set ssetObj = CreateSelectionSet("textobj")
Dim FType, FData
BuildFilter FType, FData, -4, ""
'SsetObj.SelectOnScreen ftype, fdata
ssetObj.Select acSelectionSetAll, , , FType, FData
For I = 0 To ssetObj.Count - 1
Select Case ssetObj.Item(I).ObjectName
Case "AcDbText" ', "AcDbMText"
Select Case ssetObj.Item(I).StyleName
Case "KADER35", "KADER50", "HELVL", "ST1", "ISO2_5"
ssetObj.Item(I).ScaleFactor = 0.64
Case Else
End Select
ssetObj.Item(I).Update
Case "AcDbBlockReference"
If ssetObj.Item(I).HasAttributes Then
varAttributes = ssetObj.Item(I).GetAttributes
For J = LBound(varAttributes) To UBound(varAttributes)
Select Case varAttributes(J).StyleName
Case "KADER35", "KADER50", "HELVL", "ST1", "ISO2_5"
varAttributes(J).ScaleFactor = 0.64
Case Else
End Select
varAttributes(J).Update
Next J
End If
End Select
ssetObj.Item(I).Update
Next I
ssetObj.Clear
'ActiveDocument.Utility.Prompt vbLf & replacedtext & " text(s) replaced!" & vbLf
End Sub