【发布时间】:2022-02-09 17:53:10
【问题描述】:
在我的 Excel 文件中,我有 10 个工作表,代表从 9 月到 6 月的月份。下载 csv 文件并对数据进行排序(按月然后按天)后,我使用以下代码将每个月的范围添加到数组中。
Function findLastRow(ws As Worksheet, column As String) As Integer
findLastRow = ws.Cells(ws.Rows.Count, column).End(xlUp).row
End Function
Function searchColumn(ws As Worksheet, column As String, value As Integer) As Boolean
Dim rng As Range
Dim cell As Range
Dim search As String
Dim startRow As Integer
Dim endRow As Integer
Set rng = ws.Range("J2:J" & findLastRow(ws, column))
Set cell = rng.Find(what:=value, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If cell Is Nothing Then
searchColumn = False
Else
searchColumn = True
End If
End Function
Sub UpdateAttendance()
Dim attendanceArr As Variant
Dim i As Integer
For i = 10 To 10
nameCheck = False
If searchColumn(attendanceSheet, "J", i) = True Then
With attendanceSheet
startRow = .Range("J1:J" & findLastRow(attendanceSheet, "J")).Find(what:=i, after:=.Range("J1")).row
endRow = .Range("J1:J" & findLastRow(attendanceSheet, "J")).Find(what:=i, after:=.Range("J1"), searchdirection:=xlPrevious).row
End With
attendanceArr = Range("A" & startRow & ":" & attendanceSheetLastLetter & endRow)
Select Case i
Case 1
populateAttendance ThisWorkbook.Sheets("January"), attendanceArr
Case 2
populateAttendance ThisWorkbook.Sheets("February"), attendanceArr
Case 3
populateAttendance ThisWorkbook.Sheets("March"), attendanceArr
populateAttendance ThisWorkbook.Sheets("April"), attendanceArr
Case 5
populateAttendance ThisWorkbook.Sheets("May"), attendanceArr
Case 6
populateAttendance ThisWorkbook.Sheets("June"), attendanceArr
Case 9
populateAttendance ThisWorkbook.Sheets("September"), attendanceArr
Case 10
populateAttendance ThisWorkbook.Sheets("October"), attendanceArr
Case 11
populateAttendance ThisWorkbook.Sheets("November"), attendanceArr
Case 12
populateAttendance ThisWorkbook.Sheets("December"), attendanceArr
End Select
End If
Next i
End Sub
当我单步执行代码时,它会跳过案例 1 到 8(1 月到 8 月),这是它应该做的。
当 i 为 9(9 月)时,成功执行 subpopulateAttendance。
当 i 为 10(10 月)时,它成功检测到 startRow 和 endRow(它指出 10 开始的行是 1302 并结束于 2211 行,这是正确的)。
然后它执行 admissionArr 行,结果是
数组为空。但是,当我将 For 循环更改为 For i = 10 To 10 时,只关注 10 月,宏就起作用了。
【问题讨论】:
-
你试过调试吗?例如,您是否获得了 startRow/endRow 的预期值?
-
您提供的少量代码并没有给我们您在问题中描述的所有信息,包括数组的定义(大小,维度),
i是如何迭代的然后用作索引等。请编辑问题以显示更多代码。