Excel VBA循环处理多月份考勤数据时数组无法正常填充问题
问题根因
给attendanceArr赋值的Range对象未绑定所属工作表,VBA会默认读取当前活动工作表的对应范围:
- 循环同时处理9月、10月数据时,9月分支调用
populateAttendance后,活动工作表被切换为「September」,后续处理10月时,是在「September」工作表中读取A1302到对应列2211的范围,该范围无有效数据,因此数组为空 - 仅循环处理10月时,没有触发其他月份的工作表切换操作,活动工作表始终为原始数据源工作表
attendanceSheet,因此可以正常读取数据
修复方法
将attendanceArr的赋值语句加上工作表限定即可:
' 原代码 attendanceArr = Range("A" & startRow & ":" & attendanceSheetLastLetter & endRow) ' 修改为 attendanceArr = attendanceSheet.Range("A" & startRow & ":" & attendanceSheetLastLetter & endRow)
可选优化建议
findLastRow函数的返回值建议改用Long类型,Excel 2007及之后版本最大行数为1048576,超出了Integer类型的上限(32767),容易出现溢出错误- 每次调用
Range.Find方法时,建议显式指定所有参数,避免上一次Find操作遗留的参数设置影响本次查找结果
内容的提问来源于stack exchange,提问作者Neo Anderson
相关产品推荐
相关产品推荐

