Форматирование даты - Для каждого l oop меняющихся выходов - PullRequest
0 голосов
/ 16 января 2020

Загадка старой даты в Excel. Я ищу совет / помощь по нижеуказанному, пожалуйста!

У меня есть набор дат:

enter image description here

Важно отметить, о эти даты: они выводятся из массива, используя start_date = Format$("01-" & sheet_date, "\ dd\/mm\/yyyy\") и end_date = Format$(DateSerial(Year(DateValue(sheet_date)), Month(DateValue(sheet_date)) + 1, 0), "\ dd\/mm\/yyyy\") соответственно.

Причина этого заключается в том, чтобы сохранить формат Великобритании. Если я использую любой другой способ, Vendor Start Dates по умолчанию для США.

Теперь с выходными датами (как указано выше) я пытаюсь пробежаться по диапазону дат и «обрезать» пространство, удерживая тот же формат. Я говорю «обрезать», потому что простой метод не приводит к желаемому британскому формату, а формат даты - к США.

Теперь для интересной части. Я попробовал пару простых вещей в тестировании, как поддерживать формат в Великобритании, и предложил следующее (тестирование в одной ячейке):

Sub test()

    Dim start_date As Date

    start_date = ActiveCell.Value
    ActiveCell.Value = start_date

End Sub

Это правильно поддерживает формат даты, как показано ниже:

enter image description here

Теперь, когда я запускаю это в For Each l oop, оно не поддерживает формат Великобритании для некоторая причина. Я использую следующий код:

Sub explicit_date_clean()

    Dim date_range As Range, cell As Range
    Dim temp_date As Date


    With ActiveSheet
        'set range
        Set date_range = .Range("1:1").Find(What:="**Vendor Start Date", LookAt:=xlWhole).Offset(1, 0).Resize(.UsedRange.Rows.Count, 2)

        For Each cell In date_range
            temp_date = cell.Value
            cell.Value = temp_date
        Next cell

    End With

End Sub

Это теперь вывод, пропускающий его через For Each l oop:

enter image description here

Есть идеи по этому поводу?

1 Ответ

0 голосов
/ 17 января 2020

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

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

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

Option Explicit
Sub dtS()
    Dim date_range As Range
    Dim temp_date As Date
    Dim vDates(0 To 10, 1 To 2) 'array to hold the dates
    Dim I As Long

    Dim WB As Workbook, WS As Worksheet

    'not sure how you are defining `sheet_date` or the number of rows
    'you'll need to edit this for that.

    'Note that the date below is interpreted as MDY
    Const sheet_date As Date = #2/1/2020# 'eg 1 Feb 2020

Set WB = ThisWorkbook 'but in your case, it would be the added workbook
Set WS = WB.Worksheets("sheet1") 'or whatever the relevant sheet is.

'where we will put the dates
With WS
    Set date_range = .Range(.Cells(1, "BI"), .Cells(10, "BJ"))
End With

'write **real** dates into the array
vDates(0, 1) = "**Vendor Start Date"
vDates(0, 2) = "**Vendor End Date"

For I = 1 To UBound(vDates)
    vDates(I, 1) = DateSerial(Year(sheet_date), Month(sheet_date), 1)
    vDates(I, 2) = DateAdd("m", 1, vDates(I, 1)) - 1
Next I

'Format the results cell and write the results there
Application.ScreenUpdating = False
With date_range
    .EntireColumn.Clear
    .NumberFormat = "dd-mm-yyyy"
    .Value = vDates
    .EntireColumn.AutoFit
End With

End Sub

enter image description here

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