我这里有 ComboBox4 更改事件的代码片段。正如您在下面的数据(Excel 图像形式)中看到的,有一个时间列,其格式为我首选的“hh:mm:ss”。我试图获取 ListBox 中时间列的总和(结果显示在表单的 Label1 中)。下面的结果没有得到正确的总和。
表格
这是上图的原始数据:
Col. A Col. B Col. E Col. G Col. J Col. L
YEAR || NAME || Total Time || COLOR || MONTH || SHAPE
2023 || LINA || 0:00:15 || GREEN || AUGUST || HEART
2023 || LINA || 0:00:07 || GREEN || SEPTEMBER || CIRCLE
2024 || GARY || 0:00:01 || GREEN || SEPTEMBER || DIAMOND
2024 || GARY || 0:00:02 || GREEN || SEPTEMBER || RECTANGLE
2024 || GARY || 0:00:15 || RED || AUGUST || OVAL
2023 || GARY || 0:00:07 || RED || AUGUST || RECTANGLE
2023 || GARY || 0:00:01 || GREEN || AUGUST || SQUARE
2024 || GARY || 0:00:02 || GREEN || SEPTEMBER || STAR
2024 || TOM || 0:00:15 || RED || AUGUST || HEART
2024 || TOM || 0:00:07 || RED || SEPTEMBER || CIRCLE
2024 || TOM || 0:00:01 || RED || SEPTEMBER || DIAMOND
2024 || TOM || 0:00:02 || YELLOW || SEPTEMBER || OVAL
2024 || TOM || 0:00:15 || YELLOW || OCTOBER || RECTANGLE
2024 || TOM || 0:00:07 || YELLOW || OCTOBER || CIRCLE
2024 || TOM || 0:00:01 || YELLOW || OCTOBER || SQUARE
2024 || TOM || 0:00:02 || YELLOW || OCTOBER || STAR
2024 || TOM || 0:00:15 || YELLOW || OCTOBER || STAR
2024 || TOM || 0:00:07 || BLUE || OCTOBER || SQUARE
这是ComboBox4代码:
Option Explicit
Private Sub ComboBox4_Change()
If Not ComboBox4.Value = "" Then
Dim ws As Worksheet, rng As Range, count As Long, K As Long
Dim arrData, arrList(), i As Long, j As Long
Set ws = Worksheets("Sheet1")
Dim countT As Date 'declared the variable here
Set rng = ws.Range("A1:L" & ws.Cells(Rows.count, "B").End(xlUp).Row)
arrData = rng.Value
count = WorksheetFunction.CountIfs(rng.Columns(1), CStr(ComboBox2.Value), rng.Columns(2), ComboBox1.Value, rng.Columns(7), ComboBox3.Value, rng.Columns(10), ComboBox4.Value)
ReDim arrList(1 To count + 1, 1 To UBound(arrData, 2))
For j = 1 To UBound(arrData, 2)
arrList(1, j) = arrData(1, j) 'header
Next
K = 1
For i = 2 To UBound(arrData)
If arrData(i, 2) = ComboBox1.Value And arrData(i, 1) = CStr(ComboBox2.Value) _
And arrData(i, 7) = ComboBox3.Value And arrData(i, 10) = ComboBox4.Value Then
K = K + 1
countT = 0
For j = 1 To UBound(arrData, 2)
countT = countT + arrData(i, 5) 'trying to get their total sum
arrList(K, 5) = Format(arrData(i, 5), "hh:mm:ss")
Next
Label1.Caption = Format(CDate(countT), "hh:mm:ss") 'show total sum in this label in the form of hh:mm:ss
End If
Next
With Me.ListBox1
.ColumnHeads = False
.ColumnWidths = "0,0,0,0,40,0,0,0,0,0,0,0"
.ColumnCount = UBound(arrData, 2)
.List = arrList
End With
End If
End Sub
提前谢谢您...
For j = 1 To UBound(arrData, 2)
应从嵌套的 For 循环中删除。Option Explicit
Private Sub ComboBox4_Change()
If Not ComboBox4.Value = "" Then
Dim ws As Worksheet, rng As Range, count As Long, K As Long
Dim arrData, arrList(), i As Long, j As Long
Set ws = Worksheets("Sheet1")
Dim countT As Date 'declared the variable here
Set rng = ws.Range("A1:L" & ws.Cells(Rows.count, "B").End(xlUp).Row)
arrData = rng.Value
count = WorksheetFunction.CountIfs(rng.Columns(1), CStr(ComboBox2.Value), rng.Columns(2), ComboBox1.Value, rng.Columns(7), ComboBox3.Value, rng.Columns(10), ComboBox4.Value)
ReDim arrList(1 To count + 1, 1 To UBound(arrData, 2))
For j = 1 To UBound(arrData, 2)
arrList(1, j) = arrData(1, j) 'header
Next
K = 1
countT = 0 ' ** Add
For i = 2 To UBound(arrData)
If arrData(i, 2) = ComboBox1.Value And _
arrData(i, 1) = CStr(ComboBox2.Value) And _
arrData(i, 7) = ComboBox3.Value And _
arrData(i, 10) = ComboBox4.Value Then
K = K + 1
' countT = 0 ' ** Remove
' For j = 1 To UBound(arrData, 2) ' ** Remove
countT = countT + arrData(i, 5) 'trying to get their total sum
arrList(K, 5) = Format(arrData(i, 5), "hh:mm:ss")
' Next ' ** Remove
' Label1.Caption = Format(CDate(countT), "hh:mm:ss") ' ** Remove
End If
Next
Me.Label1.Caption = Format(CDate(countT), "hh:mm:ss") 'show total sum in this label in the form of hh:mm:ss
With Me.ListBox1
.ColumnHeads = False
.ColumnWidths = "0,0,0,0,40,0,0,0,0,0,0,0"
.ColumnCount = UBound(arrData, 2)
.List = arrList
End With
End If
End Sub