我正在尝试编写代码以将每个工作表的某些数据范围复制到摘要表 . 我尝试了很多这个版本(对我来说太多了,无法将它们全部放在这里),但每个版本的摘要表都有空值 . 我不明白出了什么问题,我没有理论 .
这是我自己写的版本 . 我试过的所有其他变种都可以在互联网上找到:
注意:实际的摘要表在代码中的其他位置创建 . 另外,我之所以将SheetIndex从6开始是因为这是我想要从中获取数据的第一张表 .
Sub PopulateSummary()
Dim nmbrParts As Integer
Dim partIndex As Integer
Dim sheetIndex As Integer
Dim sheetCount As Integer
sheetCount = ThisWorkbook.Sheets.Count
for sheetIndex = 6 To sheetCount
With Sheets(sheetIndex)
.Activate
.Range("B2").Select
Call SelectFirstToLastInColumn
nmbrParts = Selection.Count
Sheets("Summary").Activate
for partIndex = 1 To nmbrParts
row = partIndex + 1
Sheets("Summary").Cells(row, 1).Value = .Cells(row, 1).Value
Sheets("Summary").Cells(row, 2).Value = .Cells(row, 2).Value
Sheets("Summary").Cells(row, 3).Value = .Cells(row, 4).Value
Sheets("Summary").Cells(row, 3).Value = .Cells(row, 3).Value
Sheets("Summary").Cells(row, 5).Value = .Cells(row, 6).Value
Next partIndex
End With
Next sheetIndex
结束子
编辑:我想出了什么 . 由于我从另一个工作簿调用这些宏,我将ThisWorkbook更改为ActiveWorkbook,因此它计算正确的工作表数 . 但问题并没有解决 .
2 回答
将其分解为多个部分,一次一行地执行代码 . 这将告诉您是否选择了您认为自己选择的内容,行是否符合您的想法等等 . 此外,当代码点击您的第一张表格(“摘要”)时暂停 . 单元格...行和使用立即窗口(Ctrl G)输出目标单元格的值
此外,由于你有一个With块,你真的不需要激活和选择单元格(你不应该在VBA中大部分时间选择,因为在表格中做的东西很慢),你也不必激活表格(“摘要”),因为您直接引用它 . 你可以这样做:
代码越简单越短,测试就越容易 .
我想到了....
我有一些问题,变量名称在错误的地方 . 我的宏应该看起来像这样:
不同之处在于我使用了不同的名称来指代我正在拍摄的纸张上的行 . 所以,我可以将数字分开 . 我还发现我在编辑中提到的错误,我必须将ThisWorkbook更改为ActiveWorkbook,因此工作表计数可能是正确的 .
感谢redOctober13的测试建议 . 您已经教会了我使用调试器的重要性 .