Excel VBA不写入汇总表

我正在尝试编写代码来将每张表中的某些范围的数据复制到汇总表中。 我已经尝试了很多版本(对我来说太多了,把它们放在这里),但是每个版本都有空值。 我不明白发生了什么事,我没有理论。

这是我自己写的版本。 我试过的所有其他变化都是在互联网上find的:

注意:实际的汇总表是在代码的其他地方创build的。 另外,为什么我有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 

结束小组

编辑:我想出了一些东西。 由于我从其他工作簿中调用这些macros,因此我将ThisWorkbook更改为ActiveWorkbook,因此它计算了正确数量的工作表。 但问题没有解决。

把它分解成一小段一行一行代码。 这将告诉你,你是否select了你所select的内容,是否你认为它是行,等等。另外,当代码碰到你的第一个表格(“Summary”)时,暂停。使用立即窗口(Ctrl + G)输出您的目标单元格的值

 ?.Cells(row, 1).Value 

另外,因为你有一个With块,所以你不需要激活和select单元格(而且你不应该在VBA中select大部分的时间,因为在表单中的东西很慢),而且你也由于您直接引用表格,因此不必激活表格(“摘要”)。 你可以做这样的事情:

 With Sheets(sheetIndex) nmbrParts = .Range("B:B").Find(what:="*",searchDirection:=xlPrevious).Row for ... . . . End With 

代码越简单,越容易testing。

我想到了….

我在variables名称在错误的地方有一些问题。 我的macros应该看起来像这样:

 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的testingbuild议。 你教会了我使用debugging器的重要性。