gpt4 book ai didi

vba - 在 VBA 中读取包含日期时间的 Excel 单元格时出现问题

转载 作者:行者123 更新时间:2023-12-01 22:51:19 25 4
gpt4 key购买 nike

一些背景:对于我正在从事的项目(从给定的客户数据 Excel 电子表格构建 XML DOM),我需要能够使用其中的日期时间。有问题的单元格包含“7/22/2011 0:00”,当我右键单击->设置单元格格式时,它告诉我类别是“自定义”(不在标准日期类别中),并且类型为“m”/d/yyyy 小时:毫米。”然而,当我选择单元格时,公式 Pane 将其显示为“7/22/2011 12:00:00AM”。因此,所有这三种对数据类型进行分类的尝试都不匹配。

问题:当我出于调试目的在 MsgBox 中使用 ActiveWorkbook.ActiveSheet.Cells(x,y) 显示单元格内容时,它仅显示 7/22/2011(截断时间) )。它不可能是日期和时间之间的空格造成的,因为我成功地读取了电子表格中其他位置带有空格的单元格。

谁能告诉我为什么会发生这种情况,或者为我指出一个 VBA/Excel 方法的正确方向,该方法不会执行 Sheet.Cells(x,y) 正在执行的这种奇怪的裁剪操作?谢谢。如果每次日期时间数据类型给我带来问题我都能得到一分钱就好了..

最佳答案

Excel 在内部将日期存储为数字。它没有实现日期类型。该数字是自过去某个时间点(1900 年或 1904 年,取决于操作系统,内置一些关于闰年的错误)以来的天数。时间表示为数字的小数部分。

要使其看起来像用户的日期,您必须为单元格指定日期格式。然后该数字在单元格中显示为日期。 (如果您向 Excel 输入类似日期的内容,Excel 会自动分配日期格式。)

当您使用ActiveWorkbook.ActiveSheet.Cells(x,y)时,您创建一个 Range对象并调用其默认属性,即 ValueValue内置了很多魔法。在您的情况下,它会查看单元格格式 - 查看日期格式 - 将内部存储的数字转换为 Variant子类型日期。当您使用消息框显示它时,下一个技巧就会发生。如果时间为 0:00,则日期将转换为不带时间的字符串。如果时间与 0:00 不同,则会将其转换为包含日期和时间的字符串。日期格式取自您的用户设置。它与您分配给 Excel 单元格的日期格式无关。

如果您使用Value2而不是Value (例如,通过使用消息框显示 ActiveWorkbook.ActiveSheet.Cells(x,y).Value2 ),然后您将看到日期的内部表示,即数字。

编辑单元格时,Excel 使用另一种日期格式,以便您可以查看和编辑日期的所有部分:年、月、日,可能还包括小时、分钟和秒。这是因为您的单元格的日期格式可能仅限于月份名称。

国际化增加了另一个复杂性。某些日期格式不会直接应用,而是使用当前用户设置中的日期格式的提示。因此,首先将该格式替换为另一种日期格式,然后再应用。此外,日期和时间格式的某些部分会受到用户设置的影响。最后,翻译日期格式的模式(在英语中, yyyy 代表年份,在德语中, jjjj )。保存 Excel 电子表格时,这些格式将以英文形式存储,以便用户和 Excel 安装程序可以使用任何语言打开该工作表。就您而言,国际化可能会影响您编辑单元格时使用的日期格式(将月份放在日期之前并使用 AM/PM 的 12 小时显示方式看起来像北美)。

我不太明白为什么 Excel 显示“7/22/2011 12:00:00AM”(而不是“7/22/2011 0:00:00AM”)。我很确定您的日期/时间的时间部分为“0:00”。但内部号码(如 Value2 所示)会告诉你肯定的信息。

关于vba - 在 VBA 中读取包含日期时间的 Excel 单元格时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6916038/

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