gpt4 book ai didi

vba - Excel VBA 日期减去一天

转载 作者:行者123 更新时间:2023-12-03 01:00:59 24 4
gpt4 key购买 nike

Private Sub cboMonth1_Change()
Dim rng As Range
Dim rngStart As Range
Dim rngEnd As Range
Dim dt As Worksheet
Dim strStart As String
Dim strEnd As String
Dim ICell As Range

Set dt = Worksheets("Sheet1")

If Me.cboMonth1.Value = "January" Then
Set rng = Range("J2")
ElseIf Me.cboMonth1.Value = "February" Then
Set rng = Range("AO2")
End If

If rng.MergeCells Then
Set rng = rng.MergeArea
Set rngStart = rng.Cells(1, 1)
Set rngEnd = rng.Cells(rng.Rows.Count, rng.Columns.Count)

strStart = Mid(rngStart.Address, 1, Len(rngStart.Address) - 1)
strEnd = Mid(rngEnd.Address, 1, Len(rngEnd.Address) - 1)

Me.cboStartDate.Clear

For Each ICell In dt.Range(strStart & "3 : " & strEnd & "3")
Me.cboStartDate.AddItem (ICell.Value)
Next ICell

Else
MsgBox ("Not merge cells")
End If
End Sub

单元格格式:自定义 dd/mm

示例:在单元格 J3 中,它包含 1/1/1900,但 J3 值在组合框中显示 12/31/1899,最后一项将显示 30/1/1900。如果选择一月,我预计组合框将包含 1/1/1900 - 31/1/1900 的日期,依此类推。

我尝试打印单个值 MsgBox (dt.Range("J3").Value) 但它给了我 12/31/1899 但该单元格的内容是 1/1/1900 。

*请注意,我没有任何可以更改单元格内容的代码。

最佳答案

问题在于 VBA 如何存储日期和时间 - 它们实际上是 double ,其中整数部分为自 1899 年 12 月 31 日以来的天数。问题是它根本无法在“0”天和“1”天正常工作。我不确定问题是浮点精度还是 Excel-VBA 转换中丢失了某些内容,但您可以使用下面的代码查看效果:

Debug.Print Format(CDate(0), "dd/mm/yyyy") 'Outputs 12/30/1899
Debug.Print Format(CDate(1), "dd/mm/yyyy") 'Outputs 12/30/1899
Debug.Print Format(CDate(2), "dd/mm/yyyy") 'Outputs 01/01/1900
Debug.Print Format(CDate(3), "dd/mm/yyyy") 'Outputs 01/02/1900

解决方案(尽管令人讨厌)是使用单元格的文本并将其转换为日期(除非您只需要字符串,在这种情况下不要'根本不转换它):

For Each ICell In dt.Range(strStart & "3 : " & strEnd & "3")
Me.cboStartDate.AddItem CDate(ICell.Text)
Next ICell

更多奇怪的演示代码,具有 1900 年 1 月 3 日之前日期转换的不可逆性:

Debug.Print CDate(ActiveSheet.Range("J3").Text)  'Outputs 01/01/1900
Debug.Print CDate(ActiveSheet.Range("J3").Value) 'Outputs 12/30/1899
Debug.Print CDbl(CDate(ActiveSheet.Range("J3").Text)) 'Outputs 2
Debug.Print CDbl(CDate(ActiveSheet.Range("J3").Value)) 'Outputs 1

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

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