Vba 从多个工作表中提取数据并放入汇总工作表的表中(循环错误)
我创建了下面的代码,用于从工作簿中的多个工作表中获取特定数据,并将它们放置在摘要工作表的行中。它要么不填充任何内容,要么一次又一次地填充每一行。它需要自动发生Vba 从多个工作表中提取数据并放入汇总工作表的表中(循环错误),vba,excel,for-loop,excel-2010,Vba,Excel,For Loop,Excel 2010,我创建了下面的代码,用于从工作簿中的多个工作表中获取特定数据,并将它们放置在摘要工作表的行中。它要么不填充任何内容,要么一次又一次地填充每一行。它需要自动发生 Sub Summary() Dim WkSht as Worksheet Dim Row as Integer 'A15 - A29: Pull over (A1) if > 0 'B15 - B29: Pull over (C1) if > 0 'C15 - C29: Pull o
Sub Summary()
Dim WkSht as Worksheet
Dim Row as Integer
'A15 - A29: Pull over (A1) if > 0
'B15 - B29: Pull over (C1) if > 0
'C15 - C29: Pull over (D7) if > 0
For Each WkSht In ThisWorkbook.Sheets
For Row = 15 To 29
If WkSht.Name Like "Tr. [0-9]*" Then
If WkSht.Range("D7").Value > 0 Then
If IsEmpty(Row) Then
Cells(Row, 1).Value = WkSht.Range("A1").Value
Cells(Row, 2).Value = WkSht.Range("C1").Value
Cells(Row, 3).Value = WkSht.Range("D7").Value
End If
End If
End If
Next Row
Next WkSht
End Sub
我认为以下更改会有所帮助(在看不到整个工作簿的情况下会有点困难):
isempty(Row)
,不如测试希望为空的内容(单元格?Row
是您前面几行设置的变量)单元格
,而不是“自己”。您无法确定执行此操作时Excel将考虑什么(哪个工作表处于活动状态)内有For Row=
循环,因此您正在一次又一次地复制相同的内容。您只需要为找到的每个工作表增加一次行
Sub Summary()
Dim WkSht as Worksheet
Dim summarySheet as Worksheet
Dim Row as Integer
'A15 - A29: Pull over (A1) if > 0
'B15 - B29: Pull over (C1) if > 0
'C15 - C29: Pull over (D7) if > 0
Set summarySheet = ThisWorkbook.Sheets("Summary") ' whatever the right name is…
Row = 15
For Each WkSht In ThisWorkbook.Sheets
if Not (WkSht.Name = summarySheet.Name) Then
If WkSht.Name Like "Tr. [0-9]*" Then
If WkSht.Range("D7").Value > 0 Then
If IsEmpty(summarySheet.Cells(Row,1)) Then
summarySheet.Cells(Row, 1).Value = WkSht.Range("A1").Value
summarySheet.Cells(Row, 2).Value = WkSht.Range("C1").Value
summarySheet.Cells(Row, 3).Value = WkSht.Range("D7").Value
End If
End If
End If
Row = Row + 1
End If
Next WkSht
End Sub
您在代码中的注释表明,如果对象仅大于零,则您希望移动对象,但您的代码仅测试一个值;你打算测试这三个吗 我不太确定我在这里读到了一个问题,但我建议:用F8遍历此代码,在第一个“Cells(Row,1)…”之后暂停。Ctrl-G到立即窗口,手动检查输入和输出参数。。。范围地址及其值。需要更多地解释代码的意图-确切地说,需要从何处复制到何处。如果总计大于0,则需要将标题(A1)、说明(C1)和总计(D7)从任何名为“Tr.#”的工作表复制到“摘要”表(A15:C29)的表中的行(即,工作表被认为是活动的)。谢谢,Floris。看来解决了我的问题!但愿我几天前能问一下。=DGlad我能帮上忙-显然我的猜测已经足够了…如果你没有花时间试图解决这个问题,你就不会那么感激我了(!!);-)顺便说一句——正如你从一些评论中可以看出的那样:非常精确地制定你的问题对于获得解决方案是一个巨大的帮助。通常,仅仅试图解释你的程序试图做什么就足以让它自己工作。你的问题很模糊——反映出你还没有完全弄清楚事情是如何运作的。这是一项很好的技能。这需要练习,练习,练习…不断提问,不断学习+1我敢肯定,事后猜测OP打算做什么需要付出很多努力:)