取值不自动转换

Take the value without automatically converting it

所以我有一个单元格需要读取,它的值是 375:00:00。查看公式时,我可以看到值为 14.01.1900 15:00:00。当试图读取单元格的值时,我只得到日期而不是 375。

我的方法是这样的,但我不确定如何继续转换单元格值?

Sub Workbook_Open()
        Dim TimeWB As Workbook
        Set TimeWB = Workbooks.Open(Filename:="J:\XXX\XXX\XXX22\XXX.xlsx", Password:="XXX")
        
        Dim TimeUS As String
        TimeUS = TimeWB.Sheets("Übersicht").Range("E3").Value
    
        'Convert? The given Value (15,625) to back to 375:00:00 ?
    
        'MsgBox Displays 15,625
        MsgBox (TimeUS)
End Sub

是否有某种内置函数可以处理这个问题? CDate 在这里不太好用..但我想这甚至不应该在这里工作。

要么使用

TimeUS = TimeWB.Sheets("Übersicht").Range("E3").Text

获取与单元格数字格式相同的格式。

或使用数字 .Value 并将其格式化为您喜欢的格式:

TimeUS = Format$(TimeWB.Sheets("Übersicht").Range("E3").Value, "[h]:mm:ss")

// 编辑

正如 Rory 指出的那样,[h] 仅在 .NumberFormat 中有效,但在 Format() 中无效。因此,您可以使用解决方法:

Public Function FormatTimeInHoursOnly(ByVal TimeVal As Date) As String
    FormatTimeInHoursOnly = CLng(Int(TimeVal * 24)) & Right$(Format$(TimeVal, "hh:mm:ss"), 6)
End Function

并像

一样使用它
    TimeUS = FormatTimeInHoursOnly(TimeWB.Sheets("Übersicht").Range("E3").Value)

这里有一个非常有趣的案例。显然,15.625 是由 Excel 产生的,将其解释为 [h]:mm:ss。 375 / 24 = 15.625。因此,要返回 375:00:00,您只需执行 15.625 * 24 & ":00:00"。当您将其分配给单元格时,Excel 会将其解释为一个值,而不是 string(但请参阅下文...)。然而,这里有一些非常奇怪的事情。你说:

When looking at the formula I can see that the value is 14.01.1900 15:00:00.

这很奇怪。显然,它应该解析为 15.01.1900 等。我认为您可能打错了字,但显然不是。我已经 运行 进行了一些测试:

Sub test()

For Each cell In Range("A1:A4")

'Range("A1") = 375:00:00 custom formatting automatically applied: "[h]:mm:ss"
'Range("A2") = 375:00:00 custom formatting manually adjusted: "mm/dd/yyyy h:mm:ss AM/PM"
'Range("A3") = "=VALUE(""375:00:00"")", defaults to general formatting: 15.625
'Range("A4") = "=VALUE(""10000:00:00"")" from 10000 this produces #VALUE! errors (or "Error 2015")

Debug.Print cell.Value
Debug.Print cell.Value2
Debug.Print cell.Text
Debug.Print "---"

Next cell

'''Immediate Window output

'     15.625
'     15.625
'    375:00:00
'    ---
'    1/14/1900 3:00:00 PM
'     15.625
'    01/15/1900 3:00:00 PM
'    ---
'     15.625
'     15.625
'    15.625
'    ---
'    Error 2015
'    Error 2015
'    #VALUE!
'    ---

'''

End Sub

所以,这里有两件非常奇怪的事情:

    Range("A2")
  1. cell.Value 给出为 1/14/1900 3:00:00 PM(重现上述问题中的怪癖),即使 .Text 会正确生成 01/15/1900 3:00:00 PM .
  2. Excel 不再理解 10000:00:00 处的“逻辑”。比较一下:
Sub insert_convert()

Range("A6") = 10000 / 24 * 24 & ":00:00"    'expected 416.6666667, but now a String: "10000:00:00"
Range("A7") = 9999 / 24 * 24 & ":00:00"     '416.625 (and "2/19/1901  3:00:00 PM" in formula bar)

End Sub

我不明白为什么会出现这些奇怪的现象。对我来说就像错误。


编辑:我想问题 2 可能与以下事实有关:在 =VALUE("10000:00:00") 的计算期间,Excel 试图将字符串解释为 Date,然后出错, 因为:

[Date h]olds IEEE 64-bit (8-byte) values that represent dates ranging from January 1 of the year 0001 through December 31 of the year 9999...