Excel VBA实现:将主表行数据依次填充至各工作表指定单元格
问题分析与修正方案
错误原因
原代码的嵌套循环逻辑完全颠倒:外层遍历工作表时,内层会把comments表B列的所有单元格依次覆盖当前工作表的A1值,最终所有工作表的A1自然只剩下B列最后一行的内容。正确逻辑应该是第N个工作表对应comments表的第(N-1)行数据(因为从第2个工作表开始匹配)。
修正后的代码
Sub vba_loop_sheets() Dim i As Long Dim shtCount As Long Dim sourceSht As Worksheet Set sourceSht = ThisWorkbook.Sheets("comments") shtCount = ThisWorkbook.Sheets.Count ' 遍历第2个及以后的工作表,对应sourceSht的第i-1行数据 For i = 2 To shtCount ' 校验sourceSht有足够的行数据,避免越界报错 If i - 1 <= sourceSht.Range("B" & sourceSht.Rows.Count).End(xlUp).Row Then ' 将B列对应行赋值到当前工作表A1 ThisWorkbook.Sheets(i).Range("A1").Value = sourceSht.Range("B" & i - 1).Value ' 若需同时填充C列数据到A2,取消下方注释 ' ThisWorkbook.Sheets(i).Range("A2").Value = sourceSht.Range("C" & i - 1).Value End If Next i End Sub
补充说明
- 加入行号校验逻辑,防止工作表数量超过
comments表B列有效行数时出现空值或运行错误 - 用
ThisWorkbook明确指向当前工作簿,避免误操作其他打开的工作簿 - 如果需要同步处理C列数据,直接启用注释行即可
内容的提问来源于stack exchange,提问作者Guru Dath
相关产品推荐
相关产品推荐

