Дата в Великобритании конвертируется в дату в США - PullRequest
0 голосов
/ 20 февраля 2019

Возникает повторяющаяся проблема, когда при копировании даты по рабочим листам она конвертируется из британского формата в американский.Я создал приведенный ниже код, который я извлекаю из D / M / Y и помещаю в строку в надежде, что он жестко закодирует правильную дату.Однако это все еще превращается в дату в США.

Любая помощь в проведении даты в формате Великобритании будет принята с благодарностью.

Dim mydate As Date
Dim sDay As String
Dim sMonth As String
Dim sYear As String
Dim sYesterdayDate As String
Dim ws As Variant

mydate = wbRecFile.Sheets(1).Range("c2").value **Date in C2 = 07/02/2019
sDay = Format(mydate, "DD")
sMonth = Format(mydate, "MM")
sYear = Format(mydate, "YYYY")

sYesterdayDate = sDay & "/" & sMonth & "/" & sYear

wbRecFile.Activate

For Each ws In ActiveWorkbook.Worksheets

    With ws
    lastrow = ws.Cells(Rows.Count, "A").End(xlUp).Row
    End With

ws.Range("C1:C" & lastrow).value = sYesterdayDate

Next ws

Ответы [ 4 ]

0 голосов
/ 20 февраля 2019

Нечто подобное я использовал в прошлом.Не используйте имена переменных, близкие к ключевым словам, и используйте серию дат.Симлар в подходе к @error 1004

Function US_TO_UK(dtInput As Variant, Optional strDelim As String = "/") As Date

Dim aSegements() As String

aSegements = Split(dtInput, strDelim)

US_TO_UK = DateSerial(aSegements(0), aSegements(1), aSegements(2))

Erase aSegements

End Function
0 голосов
/ 20 февраля 2019

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

Если вы хотите отформатироватьдиапазон как dd/mm/yyyy, установите NumberFormat на "dd\/mm\/yyyy" (если вы пропустите обратную косую черту, вы увидите дефисы вместо косых черт).Однако лучше использовать формат даты по умолчанию, который отображает даты в соответствии с настройками системы пользователя, поскольку это будет предпочтительный формат для всех, кто взаимодействует с вашей книгой.

0 голосов
/ 20 февраля 2019

На мой взгляд, лучший подход - преобразовать дату в текст и разделить ее:

Option Explicit

Sub test()

    Dim Day As String, Month As String, Year As String
    Dim USFormat As String, UKFormat As String

    USFormat = "2019/02/20"

    Day = Right(USFormat, 2)
    Month = Mid(USFormat, 6, 2)
    Year = Left(USFormat, 4)

    UKFormat = Day & "/" & Month & "/" & Year

End Sub
0 голосов
/ 20 февраля 2019

Получение значения даты из ячейки обычно работает для меня:

Dim mydate As Date
Dim ws As Variant

mydate = DateValue(wbRecFile.Sheets(1).Range("c2").value )

wbRecFile.Activate

For Each ws In ActiveWorkbook.Worksheets

    With ws
        lastrow = ws.Cells(Rows.Count, "A").End(xlUp).Row
    End With

ws.Range("C1:C" & lastrow).value = mydate

Next ws

Редактировать: применить мои изменения к исходному коду.

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