明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2254|回复: 3

如何用VBA更改字体的字形名称(黑体,宋体等)

[复制链接]
发表于 2015-10-11 22:52:55 | 显示全部楼层 |阅读模式
本帖最后由 兰州人 于 2015-10-12 07:28 编辑

下面代码是通过数据集,fDataArr = Array("MText", "Text"): fTypeArr = Array("0", "0")
通过ReturnAllSelectSet获得MText,Text集。


          Case "AcDbText"
             Set objTxt = objSet.Item(ii)
             With objTxt
               'Debug.Print .TextString
               'Debug.Print .ScaleFactor
               .ScaleFactor = 0.5
             End With
请求帮助,如何更改text的字体字形名,如更改为黑体,宋体字
  1. Sub ls1()
  2.   Dim objSet As AcadSelectionSet
  3.   Dim fDataArr, fTypeArr
  4.   fDataArr = Array("Line", "Arc"): fTypeArr = Array("0", "0")
  5.   fDataArr = Array("Line", "Text"): fTypeArr = Array("0", "0")
  6.   fDataArr = Array("Text"): fTypeArr = Array("0")
  7.   fDataArr = Array("MText", "Text"): fTypeArr = Array("0", "0")
  8.   Dim objLine As AcadLine, objArc As AcadArc, objText As AcadText
  9.   Set objSet = ReturnAllSelectSet(fTypeArr, fDataArr)
  10.   Dim objTxt As AcadText, objMTxt As AcadMText
  11.   ''
  12.   For ii = 0 To objSet.Count - 1
  13.       'Debug.Print objSet.Item(ii).ObjectName
  14.       Select Case objSet.Item(ii).ObjectName
  15.           Case "AcDbText"
  16.              Set objTxt = objSet.Item(ii)
  17.              With objTxt
  18.                'Debug.Print .TextString
  19.                'Debug.Print .ScaleFactor
  20.                .ScaleFactor = 0.5

  21.              End With
  22.           Case "AcDbMText"
  23.              Set objMTxt = objSet.Item(ii)
  24.              With objMTxt
  25.                 Debug.Print .TextString
  26.              End With
  27.       End Select
  28.       
  29.   Next ii
  30.   
  31. End Sub
  1. Function ReturnAllSelectSet(fTypeArray As Variant, fDataArray As Variant) As AcadSelectionSet
  2.     Dim Sset As AcadSelectionSet
  3.     On Error Resume Next
  4.     '建立选择集
  5.     ThisDrawing.SelectionSets("aa").Delete
  6.     Set Sset = ThisDrawing.SelectionSets.Add("aa")
  7.     '建立过滤器
  8.     Dim fType, fData
  9.     ReDim fType(0 To UBound(fTypeArray) + 2) As Integer
  10.     ReDim fData(0 To UBound(fDataArray) + 2) As Variant
  11.     fType(0) = -4
  12.     For ii = 0 To UBound(fTypeArray)
  13.       fType(ii + 1) = fTypeArray(ii)
  14.     Next ii
  15.     fType(UBound(fType)) = -4
  16.     ''
  17.     fData(0) = "<Or"
  18.     For ii = 0 To UBound(fDataArray)
  19.       fData(ii + 1) = fDataArray(ii)
  20.     Next ii
  21.     fData(UBound(fData)) = "Or>"
  22.     ''
  23.     '选择过滤出图形中所有的标注对象
  24.     Sset.Select acSelectionSetAll, , , fType, fData
  25.     Set ReturnAllSelectSet = Sset
  26. End Function

  1. Private Sub ll()
  2.    Dim Count As Integer
  3.       
  4.    Dim Ent As AcadEntity, BlkRef As AcadBlockReference
  5.    Dim mTxtEnt As AcadMText, TxtEnt As AcadText
  6.       For ii = 0 To ThisDrawing.ModelSpace.Count - 1
  7.          Set Ent = ThisDrawing.ModelSpace.Item(ii)
  8.          Select Case Ent.ObjectName
  9.              Case "AcDbBlockReference"
  10.                 Set BlkRef = Ent
  11.              Case "AcDbMText"
  12.                 Set mTxtEnt = Ent
  13.                 Debug.Print mTxtEnt.TextString
  14.          End Select
  15.       Next ii
  16. End Sub
发表于 2015-10-12 10:46:47 | 显示全部楼层
如果没记错的话,不能改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
 楼主| 发表于 2015-10-12 19:19:20 | 显示全部楼层
谢谢回复
附件第三软件(Solidworks)自动生成的DWG文件。

文字处理格式总会有些问题,只能用AutoCAD的VBA方法处理。




现在解决方法用人工爆炸文字后,用下面代码进行处理。
  1. Private Sub ll3()
  2.    
  3.       
  4.    Dim Ent As AcadEntity, BlkRef As AcadBlockReference, E() As AcadEntity
  5.    Dim mTxtEnt As AcadMText, TxtEnt As AcadText, Kk As Integer
  6.       For ii = 0 To ThisDrawing.ModelSpace.Count - 1
  7.          Set Ent = ThisDrawing.ModelSpace.Item(ii)
  8.          Select Case Ent.ObjectName
  9.              Case "AcDbText"
  10.                 Set TxtEnt = Ent
  11.                 TxtEnt.ScaleFactor = 0.7
  12.                
  13.          End Select
  14.       Next ii
  15. End Sub

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2015-10-13 09:19:41 | 显示全部楼层
同样问题哈。以下是我的代码
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, "<or", 0, "text", 0, "mtext", 0, "insert", -4, "or>"
    '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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 10:07 , Processed in 0.184009 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表