【发布时间】:2015-03-16 05:33:00
【问题描述】:
我有 2 个工作簿。一个 wb 充当数据库(划分为用户),而另一个用于根据日期从该 wb 中提取数据。我循环了宏,起初它似乎只从第一张表中提取数据。 请参阅下面的注释
Dim y As Integer
Dim r As Integer
Dim WS_Count As Integer
Dim I As Integer
r = CollateSh3.Range("D" & Rows.Count).End(xlUp).Row + 1
y = 3
WS_Count = wbLog.Worksheets.Count
For I = 1 To WS_Count
Do Until wbLog.Sheets(I).Range("A" & y) = ""
If wbLog.Sheets(I).Range("B" & y).Value = RequiredDate Then
CollateSh3.Range("A" & r).Value = wbLog.Sheets(I).Range("D" & y).Value
CollateSh3.Range("C" & r).Value = wbLog.Sheets(I).Range("F" & y).Value
CollateSh3.Range("D" & r).Value = wbLog.Sheets(I).Range("G" & y).Value
CollateSh3.Range("E" & r).Value = wbLog.Sheets(I).Range("H" & y).Value
CollateSh3.Range("F" & r).Value = wbLog.Sheets(I).Range("I" & y).Value
CollateSh3.Range("G" & r).Value = wbLog.Sheets(I).Range("J" & y).Value
CollateSh3.Range("H" & r).Value = wbLog.Sheets(I).Range("K" & y).Value
CollateSh3.Range("I" & r).Value = wbLog.Sheets(I).Range("L" & y).Value
CollateSh3.Range("K" & r).Value = wbLog.Sheets(I).Range("N" & y).Value
r = r + 1
y = y + 1
Else
y = y + 1
End If
Loop
'MsgBox wbLog.Sheets(I).Name
Next I
编辑:我想我可能有有用的附加信息。宏似乎没有跳过。当我尝试向数据库文件添加更多条目时,它会提取数据,除了它从上一张表上结束的行开始。例如,如果它在 sh1 的第 9 行结束,则代码从 sh2 的第 10 行开始。
如何在转到下一张之前重置增量?
【问题讨论】:
-
在 IF 块中添加一些
Debug.Print行以表明它已被执行(至少表明 y 和 r 已递增)。我怀疑wbLog.Sheets(I).Range("B" & y).Value = RequiredDate永远不会解决True,或者只工作一次。您还应该将Long用于行和列计数器。 -
检查
wbLog.Sheets(I).Range("B" & y).Value = RequiredDate是否是相同的比较类型 -
嗨@PatricK。我按照您的建议做了并插入了
Debug.Print,但是会出现增量。我还尝试更改For I = 1 to WS_Count,并从 2 开始。它仍然只是在第一张纸上运行,所以它似乎为该纸解决了 True。 -
嗨@katz,你能进一步解释一下你的意思吗?对不起,我忘了提到我是自学的,所以我的 vba 技能不完整。提前致谢。
-
如果没有跳过,请将
y = 3移动到For I = 1 To WS_Count下方,这样每张工作表都从第3 行开始。