如何修正多条件If语句得到的输出

时间:2019-01-31 13:46:21

标签: excel vba

我有几个具有多个条件的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

我想要发生的是将运行时打印到消息框中(或者理想情况下打印到第15栏中)。当前,消息框仅使用vbaOK按钮返回空白。

为提高代码可读性而编辑...

1 个答案:

答案 0 :(得分:0)

我尝试缩短代码。有什么建议么? @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