gpt4 book ai didi

vba - Excel VBA 日期格式

转载 作者:行者123 更新时间:2023-12-01 17:58:05 30 4
gpt4 key购买 nike

我有一个包含多个日期的电子表格。这些通常以 mm/dd/yyyymm/dd/yyyy hh:mm 格式出现。

问题是日期并不总是正确输入,我想进行检查以确保它们是代码中的日期。

我最初的想法是使用 IsDate 来检查或 CDate 但这似乎不起作用:它仍然返回字符串而不是日期。

此后我进行了一个小实验,结果表明这些函数并未按照我期望的方式工作。方法论是:

  1. 在单元格 A1 中输入公式 =DATE(2013,10,28)
  2. 单元格 B1 公式 =A1*1 应等于数字 (41575)
  3. 运行这个小脚本

    Sub test()

    MsgBox ("Start:" & TypeName(ActiveCell.Value) & " " & IsDate(ActiveCell.Value))

    ActiveCell.Value = Format(ActiveCell.Value, "mm/dd/yyyy")
    MsgBox ("After format: " & TypeName(ActiveCell.Value) & " " & IsDate(ActiveCell.Value))

    ActiveCell.Value = CDate(ActiveCell.Value)
    MsgBox ("After Cdate: " & TypeName(ActiveCell.Value) & " " & IsDate(ActiveCell.Value))

    End Sub

当脚本启动时,单元格的类型为日期,并且 IsDate 返回 true。经过 Format 运行后,它是字符串类型,但 IsDate 仍然返回 true。 CDate 还将单元格转换为字符串。单元格 B1 现在也将返回 0(因为它是字符串*1)。

所以我想总结一下这些问题:

  1. 为什么 FormatCDate 将我的单元格更改为字符串?
  2. 如何确保单元格返回日期值,而不仅仅是看起来像日期的字符串?

最佳答案

区分单元格的内容、它们的显示格式、VBA从单元格读取的数据类型以及非常重要。从 VBA 写入单元格的数据类型以及 Excel 如何自动解释它。 (参见例如 this previous answer 。)它们之间的关系可能有点复杂,因为 Excel 会将一种类型(例如字符串)的值解释为某种其他数据类型(例如日期),然后自动更改 < em>显示格式以此为基础。最安全的选择是明确地执行所有操作,而不是依赖于这种自动的东西。

我进行了你的实验,但没有得到与你相同的结果。我的单元格 A1 一直保持日期,B1 保持 41575。所以我无法回答你的问题#1。结果可能取决于您的 Excel 版本/设置选择如何根据单元格的内容自动检测/更改单元格的数字格式。

问题#2,“如何确保单元格返回日期值”:好吧,不确定“返回”日期值是什么意思,但如果您希望它包含 根据您从 VBA 写入的内容显示为日期的数值,那么您可以:

  • 向单元格写入一个字符串值,您希望 Excel 自动将其解释为日期和格式。交叉手指。显然这不是很稳健。或者,

  • 从 VBA 向单元格写入数值(显然,日期类型是预期类型,但整数、长整型、单精度或 double 也可以),并根据您的需要显式设置单元格的数字格式。使用 .NumberFormat 属性(或在 Excel 中手动设置)所需的日期格式。这更加稳健。

如果您想检查现有单元格内容是否可以显示为日期,那么这里有一个函数可以帮助您:

Function CellContentCanBeInterpretedAsADate(cell As Range) As Boolean
Dim d As Date
On Error Resume Next
d = CDate(cell.Value)
If Err.Number <> 0 Then
CellContentCanBeInterpretedAsADate = False
Else
CellContentCanBeInterpretedAsADate = True
End If
On Error GoTo 0
End Function

使用示例:

Dim cell As Range
Set cell = Range("A1")

If CellContentCanBeInterpretedAsADate(cell) Then
cell.NumberFormat = "mm/dd/yyyy hh:mm"
Else
cell.NumberFormat = "General"
End If

关于vba - Excel VBA 日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19801598/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com