excel 我如何才能防止一天中的时间出现在单元格中的日期上?

mf98qq94  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(96)

我有一个宏,它将单元格设置为从MS Project API的任务对象中提取的日期值,如下所示:

Sub Example(t as MSProject.Task, row As Integer, column As Integer)
    
    dim dt as Date
    dt = t.Start 'start date of a Microsoft Project task being accessed via the MS Project API

    ActiveSheet.Cells(row, column) = dt

End Sub

区域日期格式遵循日-月-年约定,因此dt的值可以是这样的:#13/03/2023 08:00:00#
我已经将我正在写入的单元格的数字格式设置为:“dd/MM/yyyy”,所以我希望日期值看起来像这样:13/03/2023(包括公式栏中的时间,但不包括单元格的显示文本)。
但是,当day值大于12时,似乎总是在单元格中显示时间。否则,它遵循正确的格式。这是我看到的一个例子:

当我在单元格中进入编辑模式然后退出编辑模式时(通过单击公式栏或单击键盘上的F2),时间将从单元格中消失。
下面是一段视频:https://www.loom.com/share/818e0f287018461a8eb6d726ff8e244b?sid=dd367cd7-a0bd-43ef-8c85-38ea78afd696
怎么办?我如何才能防止这种情况,并使时间值不显示在这些单元格时,天值大于12?
我试过使用cStr()方法将date变量转换为字符串值,但Excel最终总是将值作为日期存储在单元格中,并且每当date变量的day值小于12时,就会翻转day和month值。所以06/03/2023(2023年3月6日)变成了03/06/2023(2023年6月3日),这显然是一个问题。
我也尝试过将date变量转换为long,但当我这样做时,我会丢失时间,我想在单元格的值中包含时间,我只是不希望它显示在单元格的文本上,如果数字格式不包含时间。

laximzn5

laximzn51#

似乎唯一的办法就是触摸每一个细胞。举例来说:

Dim c As Range
For Each c In ActiveSheet.Range("A2:B7")
    Dim d As Date
    d = CDate(c) + 0
    c = d
Next c

我复制这个问题的唯一方法是使用任务StartText属性(例如,t.StartText)而不是任务Start属性(t.Start)。然而,使用它得到了与问题中所示相同的结果,所以幸运的是,这个解决方案将起作用。
值得注意的是,在用户界面中工作时,使用PasteSpecial将0一次性添加到整个范围:Add可以工作,但在vba中不能。

vmdwslir

vmdwslir2#

Excel和日期时间的一个好建议是使用双精度而不是日期,给予单元格的日期的双精度值:45203.665将导致单元格的格式。很好的使用价值2属性
尝试:ActiveCell.Value2 = 45203.665

nwwlzxa7

nwwlzxa73#

尝试将日期解析为字符串

Option Explicit

Sub Example(t As MSProject.Task, row As Integer, column As Integer)
     'start date of a Microsoft Project task being accessed via the MS Project API
    ActiveSheet.Cells(row, column) = ParseDMY(CStr(t.Start))
End Sub

Function ParseDMY(s As String) As Date
    Dim ar, arDMY
    ar = Split(Trim(s), " ")
    arDMY = Split(ar(0), "/")
    ParseDMY = DateSerial(arDMY(2), arDMY(1), arDMY(0)) + TimeValue(ar(1))
End Function

相关问题