Проблема с форматом даты, переписав в будку с VBA - Excel

Я работаю в макросе, в котором через формуляр и поле ввода так называемого текста fechasolicitudreq. Я сохраняю даты в соответствующих ячейках.

Я протестировал следующие форматы:

  • Cells(i,j).Value = Me.fechasolicitudreq.Value
  • Cells(i,j).Value = Format(Me.fechasolicitudreq.Value, "Short Date")
  • Cells(i,j).Value = Format(Me.fechasolicitudreq.Value, "dd/mm/yyyy")

Но со мной происходит следующее:

  • Если дата 10.01.2017 в будке, он пишет себе 01.10.2017
  • Если дата 13.01.2017 в будке, он пишет себе 13.01.2017

Более того, большая дилемма - что кроме того результаты функций Month() и Day() также они оказываются поврежденными. Из-за реализованных доказательств, он распределяется dd как день, если этот больше, чем 12, но а, он распределяется как месяц (и это оценивается в функциях).

Хоть бы он мог давать ему формат даты на испанском языке, но в случае, если нет, если только функции Day() и Month() будьте связными, чтобы мочь использовать эту информацию.

Заметь: Я попробовал прилагать также пустой string, но он это меняет автоматически в date.

3
задан 13.01.2017, 19:33
2 ответа

pasГі то же самое, dГ - 1 для 12 касалась даты с форматом международная дата и 13 в дальнейшем как традиционная дата. Это solucionГ© Объявляя переменную, как Я Восходил.

    Dim fecha as Date
    fecha = Me.fechasolicitudreq.Value
    Cells(i,j) = fecha
0
ответ дан 24.11.2019, 11:37

MÉTODO 1
Делая доказательства я открыл, что с простым Повторно нравится (.Text, "/", "/") ячейка делает swap с mm/dd/yyyy <-> dd / мм / aaaa.

cГіdigo остается asГ-:

Sub BotonFormateaFecha_Click()

    'Obligatorio si no queremos que recorra la columna entera
    Range("AG2", "AG" & Range("AG1").End(xlDown).Row).Select

    'Swap mm/dd/yyyy <-> dd/mm/aaaa
    For Each obj_cell In Selection.Cells
        With obj_cell
            If IsNull(obj_cell) Then Exit Sub
            .Value = Replace(.Text, "/", "/")
            '.NumberFormat = "dddd dd/mm/yyyy"
        End With
    Next
End Sub

introducir la descripción de la imagen aquí

, Хотя код делает swap данный раз, который выполняет не это harГЎ в ней lГ-nea 7, так как интерпретируется, что первое число - dГ - в. Это в funciГіn конфигурации твоего windows.

TambiГ©n мы можем форматировать линию с

.NumberFormat = "dddd dd/mm/yyyy"

, чтобы получать что-либо подобное: В четвергов 10.01.2019

MÉTODO 2
Восток другой mГ©todo и только использует Range.TextToColumns вместе с FieldInfo:=Array(0, xlDMYFormat) как аргумент.

- increГ-ble, но остается одиноким в одной lГ-nea. AdemГЎs ячейка не только остается форматируемой в дате но он допускает любой carГЎcter как разделитель дат. Хорошее простой lГ-nea состоит в том, что мы избегаем себя в том, чтобы использовать операторы asignaciГіn ( = ) или циклы или Ты Повторно нравишься...
DespuГ©s, выполняет весь ранг habrГЎ измененный в формат, помеченный xlDMYFormat.

, Заботившиеся, потому что это не постоянное форматирование. Если мы вновь пишем в этой ячейке с ними mГ©todos предыдущие ячейку volverГЎ, чтобы показывать формат MDY.

'VBA Excel

'Copiamos A a C
Range("C1:C9") = Range("A1:A9").Value

'Cambiamos todo al formato marcado por xlDMYFormat
Range("C1:C9").TextToColumns FieldInfo:=Array(0, xlDMYFormat)

Пример принятых символов и конечного результата.

introducir la descripción de la imagen aquí



Другой mГ©todo состоит, в текст форматирует ячейки в способе, выбирать только ограниченный ранг и делать Фор Эач . Конечно знаки Повторно нравься (.Text, ".", "-") могут быть измененными.

Восток cГіdigo функционирует верно.

'VBA Excel

Private Sub f_MiFuncion()

    'Obligatorio si no queremos que recorra la columna entera
    Range("E1", "E" & Range("E1").End(xlDown).Row).Select

    'Obligatorio para que Excel no haga swap ddmm->mmdd
    Selection.NumberFormat = "@"

    'Este método no genera errores de swap
    For Each obj_cell In Selection.Cells
        With obj_cell
            If IsNull(obj_cell) Then Exit Sub
            obj_cell.Value = Replace(.Text, ".", "-")
        End With
    Next
   'Volvemos a formatear como Fecha
    Selection.NumberFormat = "mm/dd/yyyy;@"
End

introducir la descripción de la imagen aquí

0
ответ дан 24.11.2019, 11:37

Ты попытался давая ему формат той же ячейке?
В Формате Ячейки / Числе / Настроенная
и ты проверяешь, что у будки был формат dd / мм / yyyy, возможно у него есть формат d / мм / yyyy.

1
ответ дан 03.12.2019, 17:41
  • 1
    Не habí в протестированный это, однако, - это, поместив в формат США, которые видны как deberí в в будке, но сделав доказательства и Day когда его просит, () в случае его считает это мне 1 (10.01.2017) и в другом его считает это мне 13 (13.01.2017). То есть вводить это в компьютер не распознает формат dd / мм / yyyy, распределяет dí в только, если он больше, чем 12. А, он вкладывается и результат функций Month и Даи tambié n изменись –  13.01.2017, 18:31
  • 2
    И если ты идешь в Панель управления Windows, Дата и Час, Менять Дату и Час, Меняться Configuració n Календаря, и ты проверяешь формат даты. –  13.01.2017, 18:39
  • 3
    Ahí он вытекает d / м / aaaa cambié в dd / мм / aaaa и продолжи вручать измененную стоимость функции u.u Probé используя " #" & датируй & " #" по крайней мере ahí меня оставляет такой cuá l, y programaré funció n dí в, месяц и añ или не má в. Спасибо –  13.01.2017, 18:42