【发布时间】:2022-07-04 16:25:57
【问题描述】:
我正在编写一个格式化 Excel 电子表格的宏。
默认日期保存为文本。
通过 UI 更改它并将其记录为宏无法识别自动过滤器中的日期。
看起来像
Dim i As Integer
i = Cells.Find(What:="*", _
After:=Range("C1"), _
LookAt:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
Dim k As Integer
For k = 3 To i
Cells(k, 3) = Format(Cells(k, 3), "dd mmmm yyyy;@")
' Changing the format like dd.mm.yyyy;@ doesn't work at all
Next k
这会在 3 月、10 月等半个月中断。当我双击单元格进行编辑并按 Enter 键时,日期会正确保存并被自动过滤器识别。
【问题讨论】:
-
你能再发一些数据让我测试一下吗?
-
@LewisMorris 当然,你到底需要什么?
-
请注意
Format()将再次返回文本而不是数字日期!因此,此代码无法工作。唯一正确的方法是编写一个解析器来解析文本并使用DateSerial()创建一个数字日期。 Excel 所做的任何自动转换都可能出现严重错误。永远不要让 Excel 猜测或将任何文本转换为日期!即使它看起来首先可以工作,它也可能会失败。 • 请edit您的问题并提供更多关于您的“日期”的示例数据。数据从何而来?如果是 CSV 或其他格式,请确保将所有日期作为文本导入,以便我们正确转换它们。 -
添加 - 像这样使用 DateSerial(year, month, day)... 你可能需要用 left() right() 或 mid() 分割你的字符串日期
-
在屏幕截图中,Excel 似乎已将 一些 的“日期”转换为数字日期,而有些则没有。这实际上是最坏的情况。您需要完全防止文本自动转换为日期,以便正确可靠地转换它们。