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