【问题标题】:Date format anomaly from array output来自数组输出的日期格式异常
【发布时间】:2019-11-09 04:24:06
【问题描述】:

我有一个二维数组,必须将它的一部分打印到一张纸上, 当我将它打印到一张纸上时,大多数日期与它们在本地窗口中的显示完全相同。 其中一些不会显示为美国日期

Sub ConvertDates()
 With Range("G1:G76")
   .NumberFormat = "dd/mm/yyyy"
   .TextToColumns Destination:=Range("G1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, 
_
       Semicolon:=False, Comma:=False, Space:=False, Other:=False, 
FieldInfo _
    :=Array(1, 4), TrailingMinusNumbers:=True
End With

End Sub

如果我在 excel 中更改格式,它只会将日期重新排列为英国格式,但日期是错误的。 EG 11/06/2019 从数组转置为 06/11/2019 但是 2019 年 6 月 13 日从阵列中转换为 2019 年 6 月 13 日。 重新格式化excel中的单元格效果为零,它只是改变了格式 它已经确定的日期在美国格式中是正确的。

如果我运行 VBA 代码来更改格式,它会接受重新格式化并现在显示正确的日期。怎么回事??请参阅转换日期() 但是,如果我将 convertdates() 代码更改为 numberformat = "dd/mm/yyyy" 它会显示不正确的日期??

如果您需要数组代码,我可以显示它,但这很奇怪。

此异常发生的日期是 10,11,12 超出可能的范围 10,11,12,13,14,15,16

【问题讨论】:

    标签: arrays excel vba date format


    【解决方案1】:

    是的,我知道您对此感到沮丧。我找到的解决方法如下。我将日期从一个范围存储到我的数组iArray。将它们输出到指定范围时,请使用以下内容。

    Sheet1.Cells(myRow, myCol).Value = Format$(iArray(aRow, aCol), "\ dd\/mm\/yyyy\")
    

    此外,您还需要对以下内容进行改编以进行清理。以上将在日期前面保留一个空格,并且由于某种原因,当您在该日期运行 VBA 时,它会变回美国。

    Sub CleanDates()
    
        'excel converting uk dates to us after performing action on it with VBA
    
        Dim strDate As String, strTrim As String
        Dim dRng As Range, dCol As Long, lRow As Long
        Dim i As Long, j As Long
    
        Set dRng = wsU.Rows(1).Find(What:="Start Dates", LookAt:=xlWhole)
    
        If Not dRng Is Nothing Then
            dCol = dRng.Column
        Else
            MsgBox "Failed to find the date columns to clean dates. Please consult the developer.", vbCritical
            Exit Sub
        End If
    
        lRow = wsU.UsedRange.Rows.Count
    
        For i = 2 To lRow
            For j = dCol To (dCol + 1)
    
                strDate = wsU.Cells(i, j).Text
    
                strTrim = Right(strDate, Len(strDate) - 1)
    
                wsU.Cells(i, j).Value = DateSerial(Year(strTrim), Month(strTrim), Day(strTrim))
    
            Next j
        Next i
    
    End Sub
    

    希望对您的问题有所帮助。

    【讨论】:

    • 除非我不明白你的方法,否则这与仅输出数组然后使用VBA更改日期格式有什么不同吗?
    • 不,当您更改日期格式时,Excel 将默认为美国。我发现如果我在输出它们后的日期运行Trim(),它们将默认为美国。同样,我发现通过首先将强制日期存储到字符串中,然后修剪,然后使用DateSerial() 输出,可以正确输出日期。我知道大量的工作,但它现在对我有用。
    • 多么令人沮丧!感谢您的洞察力
    猜你喜欢
    • 1970-01-01
    • 2013-05-19
    • 2014-01-22
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多