我需要一个宏来更改Word中的日期和时间格式
来自:[11:47,9月21日2017]
致:21/09/2017,11:47 -
我有一个超过9000行需要更改的文档 . 这有可能吗?我已经阅读了一些允许我更改日期的内容,但没有任何内容可以让我更改日期和时间 .
任何帮助都将受到大力赞赏
谢谢
到目前为止我所拥有的:
Sub GetDateAndReplace()
Dim FoundOne As Boolean
Selection.HomeKey Unit:=wdStory, Extend:=wdMove
FoundOne = True ' loop at least once
Do While FoundOne ' loop until no date is found
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "([0-9]{2,2})[:]([0-9]{2,2})[,]([0-9]{1,2})[/]([0-9]{1,2})[/]([0-9]{4})"
.Format = True
.Forward = True
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceNone
' check the find to be sure it's a date
If IsDate(Selection.Text) Then
Selection.Text = Format(Selection.Text, " dd/mm/yyyy, hh:mm")
Selection.Collapse wdCollapseEnd
Else ' not a date - end loop
FoundOne = False
End If
Loop
结束子
但是我得到了这个错误
运行时错误“6003”:“查找内容”文本包含模式匹配表达式,该表达式过于复杂 .
谢谢
2 回答
我做了一些调查,发现Word中的查找/替换的限制(我正在使用Office 365,Word 2016) .
之前的回答错过了您也在日期内进行转置的事实 .
当我构建查找查询时,其中日期也根据需要进行转置我得到了
“([]()(,)(@)()(/)()(/)()(])”
但它不起作用,给出你报告的相同错误 . 经过一番调查后,似乎这是由于查找字段数量限制为9 .
鉴于123456789A的文本,然后搜索
“(1)(2)(3)(4)(5)(6)(7)(8)(9)”
工作正常但是
“(1)(2)(3)(4)(5)(6)(7)(8)(9)(A)”
失败 .
在您的特定情况下,我们可以通过将(,)改为just,给出查找查询,将查找字段的数量减少到9
“([](),(@)()(/)()(/)()(])”
这意味着您现在可以使用替换指令重建日期
“\ 6 // \ 4 // \ 8,\ 1 - ”
如果您无法将搜索简化为9个或更少的字段,则需要进行多次搜索 . 在您的情况下,第一个是使用前一个答案中显示的查找/替换来转置时间和日期,第二个是在日期内转置 .
顺便说一句,如果你不能保证逗号之后总有一个或多个空格,你应该进行初始查找/替换以在逗号后面添加一个空格 . 这是因为没有可用于0个或更多字符的查找字段,并且建议的查找查询将使用一个或多个空格,但不存在空格时 .
你会注意到在我的查找查询中我没有查找数字,只查找分隔符 . 这意味着查找/替换将同样适用于具有月份名称而非月份数字的日期,例如21 /月/ 2017 .
如果你确实想要一个编程解决方案,那么我建议避免使用find / replace,而是使用范围movewhile / moveuntil方法,因为你有一个由[和]限定的明确定义的字段 . 然后,您可以使用VBA函数拆分从范围文本创建两个数组 . 第一个将字符串拆分为时间和日期,通过拆分','和第二个拆分,通过拆分'/'将日期分为日,月,年
你真的甚至不需要一个宏 . 尝试三个
wildcard
查找/替换操作,其中:Note: 如果您需要将{1,2}更改为{1; 2} .
如果你真的想要一个宏,你可以使用: