ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 15911|回复: 34

[求助] 如何用vba修改字体(分汉字、英文、数字三个类型修改)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-10-8 13:47 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
在excel中修改字体和格式好像还蛮容易的,但是在word当中似乎就难多了。

    Sub ff()
    Dim a As Integer
    Dim bb As Range
    For i = 1 To 2
    For j = 1 To 5
    Set bb = ActiveSheet.Cells(i, j)
    For j1 = 1 To Len(bb)
    a = Asc(Mid(ActiveSheet.Cells(i, j), j1, 1))
    Select Case a
    Case Is < 0
    bb.Characters(j1, 1).Font.Name = "华文细黑"
    Case 48 To 57
    bb.Characters(j1, 1).Font.Name = "Arial"
    Case Else
    bb.Characters(j1, 1).Font.Name = "Times New Roman"
    End Select
    Next j1
    Next j
    Next i
    End Sub


这段代码是应用于excel中的,但是在word当中呢?
我要如何用代码遍历word当中所有的文字呢?
如何用代码应用它的字体呢?
我希望是中文用的是『华文细黑』,英文用的是『times new roman』,数字用的是『Arial』,并且希望是在保存的时候能够启用宏,对全文进行刷一遍,这样的代码要怎样写才合适呢?


TA的精华主题

TA的得分主题

发表于 2015-10-10 11:03 | 显示全部楼层

  1. Public WithEvents appWord As Word.Application
  2. Private Sub appWord_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
  3.    
  4.     Selection.HomeKey Unit:=wdStory
  5.     Selection.WholeStory
  6.     Selection.Find.ClearFormatting
  7.     With Selection.Find
  8.         .Text = "([!0-9a-zA-Z]@)"
  9.         .Replacement.Text = "\1"
  10.         .Forward = True
  11.         .Wrap = wdFindContinue
  12.         .Format = True
  13.         .MatchCase = False
  14.         .MatchWholeWord = False
  15.         .MatchByte = False
  16.         .MatchAllWordForms = False
  17.         .MatchSoundsLike = False
  18.         .MatchWildcards = True
  19.     End With
  20.     Selection.Font.Name = "华文细黑"
  21.    
  22.     Selection.HomeKey Unit:=wdStory
  23.     Selection.WholeStory
  24.     Selection.Find.ClearFormatting
  25.     With Selection.Find
  26.         .Text = "([a-zA-Z]@)"
  27.         .Replacement.Text = "\1"
  28.         .Forward = True
  29.         .Wrap = wdFindContinue
  30.         .Format = True
  31.         .MatchCase = False
  32.         .MatchWholeWord = False
  33.         .MatchByte = False
  34.         .MatchAllWordForms = False
  35.         .MatchSoundsLike = False
  36.         .MatchWildcards = True
  37.     End With
  38.     Selection.Font.Name = "Times New Roman"
  39.    
  40.     Selection.HomeKey Unit:=wdStory
  41.     Selection.WholeStory
  42.     Selection.Find.ClearFormatting
  43.     With Selection.Find
  44.         .Text = "([0-9]@)"
  45.         .Replacement.Text = "\1"
  46.         .Forward = True
  47.         .Wrap = wdFindContinue
  48.         .Format = True
  49.         .MatchCase = False
  50.         .MatchWholeWord = False
  51.         .MatchByte = False
  52.         .MatchAllWordForms = False
  53.         .MatchSoundsLike = False
  54.         .MatchWildcards = True
  55.     End With
  56.     Selection.Font.Name = "Arial"
  57.    
  58.     Selection.HomeKey Unit:=wdStory
  59. End Sub
复制代码

楼主是高手,自己整理一下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-12 10:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
shenghua8 发表于 2015-10-10 11:03
楼主是高手,自己整理一下。

非常感谢你!细心消化中。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-12 11:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
保存这个功能似乎无法实现,我看不出是什么问题。所以现在暂时是手动执行。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-12 13:58 | 显示全部楼层
这个代码好像还是不能分别设定英文和数字的字体。
运行了一遍下来后英文字体也被设成arial了。怎么都没有调整出来。

TA的精华主题

TA的得分主题

发表于 2015-10-12 14:26 | 显示全部楼层
改为普通模块,可行。
即放到形如:
Sub 替换三类字体()
    ...
End Sub
里可行。

可惜Word没有Excel那样的
Private Sub Workbook_BeforeSave
事件。

用WithEvents也不行。
所以说,你是高手,请你自己整理。

TA的精华主题

TA的得分主题

发表于 2015-10-12 14:56 | 显示全部楼层
本帖最后由 shenghua8 于 2015-10-12 15:07 编辑

算了。
我是手工操作录制的宏,果然没用。

手工操作是这样的:
分三次查找,每次将查找所选定的内容,换个字体。

第一次查找:
  1. ([!0-9a-zA-Z]@)
复制代码

勾上“使用通配符”,
查找主文档。
这时查找到的是:非半角字母、非半角数字(即汉字及其它)。
手工改变字体为"华文细黑"。
如图:
无标题.png

第二次查找:
  1. ([a-zA-Z]@)
复制代码

勾上“使用通配符”,
查找主文档。
这时查找到的是:半角字母。
手工改变字体为"Times New Roman"。

第三次查找:
  1. ([0-9]@)
复制代码

勾上“使用通配符”,
查找主文档。
这时查找到的是:半角数字。
手工改变字体为"Arial"。


.

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-10-12 15:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
shenghua8 发表于 2015-10-12 14:56
算了。
我是手工操作录制的宏,果然没用。

厉害厉害。真的挺难的,这个问题早几年有人提出来。但似乎还没有高手把它给解决掉。
我一看那么多代码,全部看不懂。
主要思路还是查找替换啊。

TA的精华主题

TA的得分主题

发表于 2015-10-12 15:41 | 显示全部楼层
andy800529 发表于 2015-10-12 15:19
厉害厉害。真的挺难的,这个问题早几年有人提出来。但似乎还没有高手把它给解决掉。
我一看那么多代码, ...

让你见笑了!也耽误你时间了。

我不懂VBA。
查找、替换,录制的宏,经常搞不成。

TA的精华主题

TA的得分主题

发表于 2015-10-12 21:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 413191246se 于 2015-10-12 21:19 编辑

* 看楼主和升华(shenghua8)朋友讨论得很热烈,开始没敢参与,怕抢 升华 的风采!
* 但为了方便楼主工作(其实我个人倒是倾向于不必设置英文字母包括数字设置为 Arial字体,默认新罗马挺好),我也调试了一段小程序,请楼主测试一下(下面的代码不包括全角数字,并且对所有文档在退出时发生作用,但必须在询问保存时选择“是”才发挥作用!)
Sub AutoClose()
    Selection.WholeStory
    Selection.Font.NameFarEast = "华文细黑"
    Selection.Font.NameAscii = "Times New Roman"
    Selection.HomeKey Unit:=wdStory
    Do
        Selection.Find.ClearFormatting
        Selection.Find.Execute findtext:="^#"
        If Selection.Find.Found = True Then Selection.Font.Name = "Arial"
    Loop Until Selection.Find.Found = False
End Sub

评分

2

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-19 12:50 , Processed in 0.050839 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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