ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: benny_thyj

[求助] WORD中英文日期需要批量替换为中文日期

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-19 15:10 | 显示全部楼层
老师,经测试??-???-2014 这类格式的日期执行代码后成了??-???-214
截图.png

TA的精华主题

TA的得分主题

发表于 2020-3-19 23:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
* 请将代码复制到 记事本 中再复制回 VBE 中试试(因我现在用的是新电脑 Win10-x64 + Office2019)。

TA的精华主题

TA的得分主题

发表于 2020-3-19 23:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
* 楼主,我把 Win10-x64 下的代码转换为 Ansi 格式,试试怎么样:(请做好备份)
  1. Sub aaaa英文日期转中文_v2()
  2.     Dim s$, v&
  3.     With ActiveDocument.Content.Find
  4.         .ClearFormatting
  5.         .Text = "[0-9]{1,2}-[A-Za-z]{3}-[0-9]{4}"
  6.         .Forward = True
  7.         .MatchWildcards = True
  8.         Do While .Execute
  9.             With .Parent
  10.                 s = .Text
  11.                 v = Len(s)

  12.                 If v = 10 Then
  13.                     s = Right(s, 4) & "年" & Mid(s, InStr(s, "-") + 1, 3) & Left(s, 1) & "日"
  14.                 Else
  15.                     s = Right(s, 4) & "年" & Mid(s, InStr(s, "-") + 1, 3) & Left(s, 2) & "日"
  16.                 End If

  17.                 s = Replace(s, "JAN", "1月")
  18.                 s = Replace(s, "FEB", "2月")
  19.                 s = Replace(s, "MAR", "3月")
  20.                 s = Replace(s, "APR", "4月")
  21.                 s = Replace(s, "MAY", "5月")
  22.                 s = Replace(s, "JUN", "6月")
  23.                 s = Replace(s, "JUL", "7月")
  24.                 s = Replace(s, "AUG", "8月")
  25.                 s = Replace(s, "SEP", "9月")
  26.                 s = Replace(s, "OCT", "10月")
  27.                 s = Replace(s, "NOV", "11月")
  28.                 s = Replace(s, "DEC", "12月")
  29.                
  30.                 s = Replace(s, "Jan", "1月")
  31.                 s = Replace(s, "Feb", "2月")
  32.                 s = Replace(s, "Mar", "3月")
  33.                 s = Replace(s, "Apr", "4月")
  34.                 s = Replace(s, "May", "5月")
  35.                 s = Replace(s, "Jun", "6月")
  36.                 s = Replace(s, "Jul", "7月")
  37.                 s = Replace(s, "Aug", "8月")
  38.                 s = Replace(s, "Sep", "9月")
  39.                 s = Replace(s, "Oct", "10月")
  40.                 s = Replace(s, "Nov", "11月")
  41.                 s = Replace(s, "Dec", "12月")

  42.                 .Text = s
  43.                 .Font.Color = wdColorRed '红色(此行代码可删除)
  44.                 .Start = .End
  45.             End With
  46.         Loop
  47.     End With

  48. '''
  49.     With ActiveDocument.Content.Find
  50.         .ClearFormatting
  51.         .Text = "[A-Za-z]{3}-[0-9]{4}"
  52.         .Forward = True
  53.         .MatchWildcards = True
  54.         Do While .Execute
  55.             With .Parent
  56.                 If Len(.Paragraphs(1).Range.Text) > 10 Then GoTo sk
  57.                 s = .Text
  58.                 s = Right(s, 4) & "年" & Left(s, 3)

  59.                 s = Replace(s, "JAN", "1月")
  60.                 s = Replace(s, "FEB", "2月")
  61.                 s = Replace(s, "MAR", "3月")
  62.                 s = Replace(s, "APR", "4月")
  63.                 s = Replace(s, "MAY", "5月")
  64.                 s = Replace(s, "JUN", "6月")
  65.                 s = Replace(s, "JUL", "7月")
  66.                 s = Replace(s, "AUG", "8月")
  67.                 s = Replace(s, "SEP", "9月")
  68.                 s = Replace(s, "OCT", "10月")
  69.                 s = Replace(s, "NOV", "11月")
  70.                 s = Replace(s, "DEC", "12月")
  71.                
  72.                 s = Replace(s, "Jan", "1月")
  73.                 s = Replace(s, "Feb", "2月")
  74.                 s = Replace(s, "Mar", "3月")
  75.                 s = Replace(s, "Apr", "4月")
  76.                 s = Replace(s, "May", "5月")
  77.                 s = Replace(s, "Jun", "6月")
  78.                 s = Replace(s, "Jul", "7月")
  79.                 s = Replace(s, "Aug", "8月")
  80.                 s = Replace(s, "Sep", "9月")
  81.                 s = Replace(s, "Oct", "10月")
  82.                 s = Replace(s, "Nov", "11月")
  83.                 s = Replace(s, "Dec", "12月")

  84.                 .Text = s
  85.                 .Font.Color = wdColorPink '粉红(此行代码可删除)
  86. sk:
  87.                 .Start = .End
  88.             End With
  89.         Loop
  90.     End With

  91. '0X月0X日替换
  92.     With ActiveDocument.Content.Find
  93.         .Execute "(0)([0-9]月)", , , 1, , , , , , "\2", 2
  94.         .Execute "(0)([0-9]日)", , , 1, , , , , , "\2", 2
  95.     End With

  96.     MsgBox "OK!!!!!!!!!!!!!!!!!!!!!", 0 + 48
  97. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-20 08:55 | 显示全部楼层
413191246se 发表于 2020-3-19 23:19
* 楼主,我把 Win10-x64 下的代码转换为 Ansi 格式,试试怎么样:(请做好备份)

我运行了一下,对于??-???-2017以及??-JAN-2017这种格式内容,代码不执行替换。烦请老师答疑!谢谢!

TA的精华主题

TA的得分主题

发表于 2020-3-20 11:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
如果“?”是要查找的字符串,则找不到!我认为你是把“?”指代一些数字。
另:如果代码运行不好,请将代码复制到 记事本 中,再另存为 Ansi 格式的 纯文本文件,再复制代码到 VBE 试试。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-20 12:36 | 显示全部楼层
413191246se 发表于 2020-3-20 11:04
如果“?”是要查找的字符串,则找不到!我认为你是把“?”指代一些数字。
另:如果代码运行不好,请将代 ...

是查找字符串。可以使用通配符吗?

TA的精华主题

TA的得分主题

发表于 2020-3-20 14:25 | 显示全部楼层
具体查找什么样的字符串呢?请 楼主 举例。——另外,我认为,上面的 v2 版本代码已经解决了你的问题。
——虽然是查找操作,但不同的目的不一定能用同样的代码,具体有区别。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-3-20 14:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
413191246se 发表于 2020-3-20 14:25
具体查找什么样的字符串呢?请 楼主 举例。——另外,我认为,上面的 v2 版本代码已经解决了你的问题。
— ...

就是我的WORD文档中有一些是明确日期的,如"21-JAN-2017",也有没有具体日期,只有月份的,如"JAN-2017"这两种上面的v2代码已经给予解决了。

还有2种情形就是文档中有文本是"??-???-2017"、"??-Feb-2017"
1)"??-???-2017"这种代表具体的日期和月份不明确,我需要将?号保留,并且将其改为中文日期格式类型,如"2017年??月??日"
2)"??-Feb-2017"这种代表仅仅具体的日期不明确,我也同样将?号保留,并且将其改为中文日期格式类型,如"2017年2月??日"

TA的精华主题

TA的得分主题

发表于 2020-3-20 20:34 | 显示全部楼层
也可以试试如下方法,目前的查找代码也匹配纯阿拉伯数字日期文本,如只要匹配含英文月份缩写的日期文本,可修改查找代码:
  1. Sub test()
  2.     Dim i As Integer
  3.    
  4.     Application.ScreenUpdating = False
  5.     With ActiveDocument.Content.Find
  6.         .MatchWildcards = True
  7.         Do While .Execute("[0-9A-Za-z-]@-[12][0-9]{3,}")
  8.             With .Parent
  9.                 If IsDate(.Text) Then
  10.                     i = UBound(Split(.Text, "-"))
  11.                     .Text = Format(.Text, IIf(i = 2, "yyyy年M月d日", "yyyy年M月"))
  12.                 End If
  13.                 .Collapse wdCollapseEnd
  14.             End With
  15.         Loop
  16.     End With
  17.     Application.ScreenUpdating = True
  18. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-3-25 01:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
楼主,sylun 老师 辛苦写的代码,你得试试啊!反馈一下意见。老师辛苦了!谢谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 11:30 , Processed in 0.049434 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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