乐筑天下

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

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

[复制链接]

120

主题

326

帖子

7

银币

中流砥柱

Rank: 25

铜币
806
发表于 2015-10-11 22:52:00 | 显示全部楼层 |阅读模式
下面代码是通过数据集,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) = ""
  18.     ''
  19.     '选择过滤出图形中所有的标注对象
  20.     Sset.Select acSelectionSetAll, , , fType, fData
  21.     Set ReturnAllSelectSet = Sset
  22. 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
回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2015-10-12 10:46:00 | 显示全部楼层
如果没记错的话,不能改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
回复

使用道具 举报

120

主题

326

帖子

7

银币

中流砥柱

Rank: 25

铜币
806
发表于 2015-10-12 19:19:00 | 显示全部楼层
谢谢回复
附件第三软件(Solidworks)自动生成的DWG文件。
文字处理格式总会有些问题,只能用AutoCAD的VBA方法处理。

uzm54sgzk5e.jpg

uzm54sgzk5e.jpg


rvlsskx5h3c.jpg

rvlsskx5h3c.jpg



现在解决方法用人工爆炸文字后,用下面代码进行处理。
  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

请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:nwqpbnwt4dk.dwg 
下载次数:0  文件大小:58.9 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]



回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2015-10-13 09:19:00 | 显示全部楼层
同样问题哈。以下是我的代码
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
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-4-20 05:11 , Processed in 0.868429 second(s), 66 queries .

© 2020-2025 乐筑天下

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