【问题标题】:Reset row increment before going to next worksheet在转到下一个工作表之前重置行增量
【发布时间】: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 行开始。

标签: vba loops excel for-loop


【解决方案1】:

这是编辑后的代码。我选择在循环结束后添加它,因为这样我会记住它以供将来参考。谢谢@PatricK!

        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

            y = 3 'to reset increment before moving on to next sheet

        Next I

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-03
    • 2016-11-09
    • 2020-08-13
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多