Ошибка в представлении времени данных в листе Excel - PullRequest
0 голосов
/ 16 июня 2020

У меня есть программа, в которой есть метод CopyToBook, который считывает данные из массива final_list (i) и представляет их пользователю в электронной таблице под названием «Данные». Но проблема в том, что когда дата 01/04/2017 представляет мне на экране дату, поменявшую место между месяцем и днем. Что могло случиться? Я уже отладил, и программа показывает правильные значения, просто показывает неправильные в электронной таблице.

Public Sub copy_to_book()

Dim i As Integer
Dim a As Integer





      'adiciona uma nova folha de calculo a seguir a ultima
        ThisWorkbook.Activate


 Worksheets.Add After:=ActiveSheet  ' :=  é usado para atribuir um valor a um determinado argumento nom

eado  apenas dentro de um método ou função.


        'Muda o nome a folha de calculo criada  para o nome da torneira

        ActiveSheet.Select
        ActiveSheet.Name = "DADOS"





 'Faz cabeçalho das colunas

    Worksheets("DADOS").Range("A1:F1").Value = Array("Timestamp", "Porta", "Setor", "Leitura ", "Valor", "Duração")
    Let Range("A1:F1").Interior.ColorIndex = 36

   'Adicona os dados no array na folha de calculo apartir da terceira linha
    'prenche as celulas da folha de calculo
        ' se a lista de consumos nao estiver vazia

    If (Not lista_final) <> -1 Then ' Se a lista de consumos estiver vazia ela esta igual a - 1

        For i = LBound(lista_final) To UBound(lista_final)


                Worksheets("DADOS").Range("A" & a + 2).Value = Format(lista_final(i).time1, "dd/mm/yyyy hh:mm:ss.SSS")
                Worksheets("DADOS").Range("A" & a + 3).Value = Format(lista_final(i).time1, "dd/mm/yyyy hh:mm:ss.SS

S")
                Worksheets("DADOS").Range("A" & a + 4).Value = Format(lista_final(i).time1, "dd/mm/yyyy hh:mm:ss.SSS")
                Worksheets("DADOS").Range("B" & a + 2).Value = lista_final(i).id_porta
                Worksheets("DADOS").Range("B" & a + 3).Value = lista_final(i).id_porta
                Worksheets("DADOS").Range("B" & a + 4).Value = lista_final(i).id_porta
                Worksheets("DADOS").Range("C" & a + 2).Value = lista_final(i).setor
                Worksheets("DADOS").Range("C" & a + 3).Value = lista_final(i).setor
                Worksheets("DADOS").Range("C" & a + 4).Value = lista_final(i).setor
                If lista_final(i).consumo_gas = 0 Then
                Worksheets("DADOS").Range("D" & a + 2).Value = "Água(L)"
                Else
                Worksheets("DADOS").Range("D" & a + 2).Value = "Água_Quente(L)"
                End If
                Worksheets("DADOS").Range("D" & a + 3).Value = "Gás"
                Worksheets("DADOS").Range("D" & a + 4).Value = "Eletricidade(KW)"
                Worksheets("DADOS").Range("E" & a + 2).Value = lista_final(i).consumo_agua
                Worksheets("DADOS").Range("E" & a + 3).Value = lista_final(i).consumo_gas
                Worksheets("DADOS").Range("E" & a + 4).Value = lista_final(i).consumo_ele
                Worksheets("DADOS").Range("F" & a + 2).Value = Format(lista_final(i).time2 - lista_final(i).time1, "hh:mm:ss.SSS")
                Worksheets("DADOS").Range("F" & a + 3).Value = Format(lista_final(i).time2 - lista_final(i).time1, "hh:mm:ss.SSS")
                Worksheets("DADOS").Range("F" & a + 4).Value = Format(lista_final(i).time2 - lista_final(i).time1, "hh:mm:ss.SSS")
                Columns("A:F").EntireColumn.AutoFit
                a = a + 3

        Next i

    End If

End Sub`

1 Ответ

0 голосов
/ 19 июня 2020

Независимо от того, что вы вводите в ячейку, если это строка, которая выглядит как дата (+/- время), Excel попытается преобразовать ее в дату, используя ваш формат по умолчанию (и в случае неудачи значение останется как- поступил).

Нет ничего непонятного 27.03.2020, так как нет 27-го месяца, но 01.04.2020 может быть либо 1 апреля, либо 4 января. Какая из этих дат будет в конце, будет зависеть от того, какой у вас формат даты по умолчанию: мм / дд / гггг или дд / мм / гггг.

Как говорит @BigBen, вы должны использовать фактическую дату (не передавайте дату в Format перед добавлением ее на лист) и отформатируйте ячейку в желаемом формате перед вы вставляете эту дату:

Dim dt, dt2

dt = DateSerial(2020, 1, 4)    'Jan 4 2020
dt2 = DateSerial(2020, 1, 20)  'Jan 20 2020


With ActiveSheet

    .Range("A1").NumberFormat = "mm/dd/yyyy"
    .Range("A1").Value = dt  '>> 01/04/2020

    .Range("A2").NumberFormat = "dd/mm/yyyy"
    .Range("A2").Value = dt  '>> 04/01/2020

    .Range("B1").NumberFormat = "mm/dd/yyyy"
    .Range("B1").Value = dt2  '>> 01/20/2020

    .Range("B2").NumberFormat = "dd/mm/yyyy"
    .Range("B2").Value = dt2  '>> 20/01/2020

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