Как исправить вывод, который я получаю с несколькими условиями If - PullRequest
0 голосов
/ 31 января 2019

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

Private Sub CommandButton24_Click()
Dim Transmit As Boolean
Dim StartTime As String
Dim EndTime As String
Dim RunTime As String
Dim messagebox As String
Dim i As Integer

i = 0
'conditions for startTime
While EtiLoggingNEW.Cells(i + 12, 1) = "Time"
    If (EtiLoggingNEW.Cells(i + 12, 6) = "Active" And EtiLoggingNEW.Cells(i + 12, 8) = "False" And Transmit = False) Then
        Transmit = True
        StartTime = EtiLoggingNEW.Cells(i + 12, 2)
    End If
    'conditions for endTime
    If ((EtiLoggingNEW.Cells(i + 12, 6) = "Standby" Or EtiLoggingNEW.Cells(i + 12, 6) = "Shutdown" Or EtiLoggingNEW.Cells(i + 12, 8) = "True") And Transmit = True) Then
        EndTime = EtiLoggingNEW.Cells(i + 12, 2)
        'Print EndTime, EtiLoggingNEW.Cells(i + 12, 15).Value
        Transmit = False
    End If

    RunTime = (EndTime - StartTime) * 86400

    messagebox = MsgBox(RunTime, vbOKOnly)
    i = i + 1
Wend
End Sub

Я хочу напечатать RunTime в окне сообщения (или в идеале в столбце 15).В настоящее время окно сообщения возвращается пустым только с кнопкой vbaOK.

Отредактировано для удобства чтения кода ...

1 Ответ

0 голосов
/ 31 января 2019

Я пытаюсь сократить код.какие-либо предложения?@QHarr @Comintern

Параметр Явный

Private Sub CommandButton24_Click()

    Dim Transmit As Boolean
    Dim StartTime As Date, EndTime As Date
    Dim RunTime As Long, i As Long

    i = 0

    With ThisWorkbook.Worksheets("EtiLoggingNEW")
        While .Cells(i + 12, 1) = "Time"
            If (.Cells(i + 12, 6) = "Active" And .Cells(i + 12, 8) = "False" And Transmit = False) Then
                Transmit = True
                StartTime = .Cells(i + 12, 2)
            End If

            If ((.Cells(i + 12, 6) = "Standby" Or .Cells(i + 12, 6) = "Shutdown" Or .Cells(i + 12, 8) = "True") And Transmit = True) Then
                EndTime = .Cells(i + 12, 2)
                Debug.Print EndTime
                    .Cells(i + 12, 15).Value = EndTime
                Transmit = False
            End If

            RunTime = (EndTime - StartTime) * 86400

            MsgBox RunTime, vbOKOnly

            i = i + 1

        Wend

    End With

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