【发布时间】:2019-07-31 19:21:36
【问题描述】:
我正在使用一个必须将日期转换为另一种格式的 Word 宏。
输入:2019 年 10 月 10 日
预计输出:2019 年 10 月 3 日
问题是日期的月份是字符串(10 de Marzo de 2019)。 我找不到将该日期转换为 dd/mm/YYYY 的方法。
到目前为止,我发现的所有内容都从 dd-mm-YYYY 转换为文本日期。
上面的代码可以使用字符串月份或其他格式从 dd/mm/yyyy 转换为日期,但它从不进入 isDate() 函数。如果我删除 isDate() 函数,格式不会执行。
这是我目前所拥有的:
Sub ChangeDates()
FoundOne = True ' loop at least once
Do While FoundOne ' loop until no date is found
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "([0-9]{1,2}) de (*) de ([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")
Selection.Font.Color = wdColorLightOrange
Selection.Collapse wdCollapseEnd
Else ' not a date - end loop
FoundOne = False
End If
Loop
End Sub
有没有办法做到这一点? 提前致谢!
【问题讨论】:
-
(第 1 部分)我还没有解决这个问题,所以不能将此添加为有用的答案。但是,您的搜索基于三个元素 - 1 位或 2 位数字的日期、希望为一个月的字符串和 4 位数字的年份。如果您可以使用这三个元素(正则表达式?)打破找到的组合,然后您可以将其传递给另一个自定义函数,该函数确认日期部分对有效的月份名称有效,然后将这三个部分缝合在一起以创建一个日期.
-
(第 2 部分)如果我要创建这样的函数,我将传递变量
ByRef并使用该函数返回一个布尔值,指示它是否是有效日期。用法可以像FoundOne = MyParseDate(selectedString)一样简单,或者在其下方添加一行(如果TRUE)将现在更改的selectedString调整为您想要的任何日期格式,因为您的函数会将其更改为Word 可接受的格式. -
另一个最后的想法 - 在寻找月份部分时,请考虑
[Jan|Feb|someOtherValidMonthText ...etc ... ]而不是 (*),它会减少您的误报(如果您目前有任何误报)