Месяц и день в дате иногда меняются местами при копировании в Excel - PullRequest
0 голосов
/ 05 сентября 2018

Моя проблема:

Я создал цикл For Each, который просматривает 2 разных столбца на одном листе.
Этот цикл копирует нужные столбцы и уникальные значения.
Хотя макрос работает, он вставит неправильную дату.
Способ вставки неправильной даты указан в разделе «Цель:».

Моя таблица:

| Date | ColB | Amount | Date | ColG | Amount |
| 02-08-2018 | V584753 | 500 | 02-08-2018 | V584753 | -500 |
| 11-08-2018 | 486542 | 1.000 | 21-08-2018 | 439857 | -30.547 |
| 21-08-2018 | 439857 | 30.547 | 31-08-2018 | V587742 | -1.059 |

Мой код:

Sub PasteCellsWithoutMatch()

Dim ColB As Range, ColG As Range, c As Range
Dim Wf As WorksheetFunction
Set Wf = WorksheetFunction
Dim vR() As Variant
Dim k As Long, j As Integer

For Each c In ColB.Cells
    If Not IsEmpty(c) Then
        With Wf
            n = .CountIfs(ColG, c)
            If n = 0 Then
                k = k + 1
                ReDim Preserve vR(1 To 3, 1 To k)
                For j = 1 To 3
                    vR(j, k) = c.Offset(0, j - 2)
                Next j
            End If
        End With
    End If
Next

Sheet("Match").Range("A1").Resize(k, 3) = Wf.Transpose(vR)

Цель:

Что я подразумеваю под «вставкой неправильной даты», код заменяет «дд-мм-гггг» на «мм-дд-гггг» всякий раз, когда первое значение меньше 12.

Значение: 02-08-2018
Становится: 08-02-2018

Принимая во внимание: 13-08-2018
Осталось: 13-08-2018

Как я могу исправить эту ошибку?
Если есть какие-либо исправления к нему.

Заранее благодарю за помощь.

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

Это зависит от ваших локальных настроек. Во всяком случае, макрос не смотрит на локальный вообще. Таким образом, вы можете обойти это, используя функцию форматирования. Например:

val1="02/08/2018"
val2=format(cdate(val1),"ddmmyyyy"))

Это сработает

0 голосов
/ 07 сентября 2018

Я сам нашел решение.

Прежде всего, спасибо за ваши усилия, но я не мог заставить себя попробовать их, так как мне нужно было изменить многое в моей формуле ...

Перед циклом по ячейкам я удалил формат даты из столбцов даты. Принимая во внимание, что транспонирование не будет менять местами числа.

RngNavRange = "A3:A" & LastRowA
RngKvikRange = "F3:F" & LastRowF

Range(RngNavRange).NumberFormat = "General"
Range(RngKvikRange).NumberFormat = "General"
0 голосов
/ 05 сентября 2018

Воспроизведение проблемы с минимальным кодом:

Public Sub TestMe()

    Dim val1 As String: val1 = "02/08/2018"
    Dim val2 As String: val2 = "13/08/2018"
    Dim myInput1 As Date
    Dim myInput2 As Date

    myInput1 = val1
    myInput2 = val2

    Range("A1") = myInput1
    Range("A2") = myInput2

End Sub

Получает это:

enter image description here


Одним из возможных решений является использование DateSerial():

Public Sub TestMe()

    Dim val1 As String: val1 = "02/08/2018"
    Dim val2 As String: val2 = "13/08/2018"
    Dim myInput1 As Date
    Dim myInput2 As Date

    myInput1 = DateSerial(Split(val1, "/")(2), Split(val1, "/")(1), Split(val1, "/")(0))
    myInput2 = DateSerial(Split(val2, "/")(2), Split(val2, "/")(1), Split(val2, "/")(0))

    Range("A1") = myInput1
    Range("A2") = myInput2

End Sub

Для какого-то продвинутого решения вы можете либо написать пользовательскую функцию, либо немного изменить региональные настройки. Последнее опасно.

...