Аномалия формата даты из массива - PullRequest
0 голосов
/ 27 июня 2019

У меня есть 2D-массив, и я должен распечатать его части на листе, когда я печатаю его на листе, большинство дат отображаются точно так же, как в окне местных жителей. Некоторые из них не отображаются в качестве даты США

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 06/06/2019 транспонируется из массива как 06/11/2019 но 13/06/2019 транспонируется из массива как 13/06/2019, как и должно быть. Переформатирование ячейки внутри Excel не имеет никакого эффекта, оно просто меняет формат даты, которую он уже определил, правильно в формате США.

Если я запускаю код VBA для изменения формата, он принимает переформатирование и теперь отображает правильную дату. WTF ?? Смотрите Convertdates () НО, если я изменю код convertdates () на numberformat = "dd / mm / yyyy" будет отображаться неверная дата ??

если вам нужен код массива, я могу его показать, но это странно.

даты, с которыми происходит эта аномалия, составляют 10,11,12 из возможного диапазона 10,11,12,13,14,15,16

1 Ответ

0 голосов
/ 27 июня 2019

Да, я знаю ваше разочарование по этому поводу. Обходной путь, который я нашел ниже. Я сохранил даты от диапазона до моего массива 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

Надеюсь, это поможет с вашей проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...