我有几个具有多个条件的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按钮返回空白。
为提高代码可读性而编辑...
答案 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