VBA嵌套Do Until Loop

时间:2015-12-10 15:43:43

标签: excel vba excel-vba

我正在制作一张包含17张纸的电子表格,其中2-16页包含我感兴趣的发票数据。

例如,如果表格(2)第4栏中的某人姓名出现在表格(1)中,那么我想要计算他们收取的金额(可在表格第10栏中找到)(2) )。电子表格2-16的布局完全相同,除了它们包含不同数量的条目且数据不同。

我有三个$ sum,我有兴趣计算,然后显示在每张纸的顶部:两笔钱代表两个不同的分区,最后一个是简单的总数(w_sum,smb_sum和total)

我遇到的问题是每张工作表显示表格(2)中的总和,而不是他们自己的。但是,当我删除外部For循环并手动更改工作表编号时,我得到正确的值。我希望我对我的问题很清楚,我将非常感谢任何帮助。我前几天才开始玩VBA,所以我对语法不太熟悉,但我认为我的逻辑是正确的或者几乎是正确的。

Sub GetSums()
    Dim i As Integer
    Dim j As Integer
    Dim w_sum As Currency
    Dim smb_sum As Currency
    Dim total As Currency

    w_sum = 0
    smb_sum = 0
    total = 0
    i = 15

    For j = 2 To 17

        Sheets(j).Activate

        Do Until Cells(i, 6).Value = 0

            If Not IsError(Application.Match(Cells(i, 4).Value, Sheets(1).Range("D2:D91"), 0)) Then
                w_sum = w_sum + Cells(i, 10).Value
            End If
            If Not IsError(Application.Match(Cells(i, 4).Value, Sheets(1).Range("E2:E91"), 0)) Then
                smb_sum = smb_sum + Cells(i, 10).Value
            End If
            total = total + Cells(i, 10).Value
            i = i + 1

        Loop

        Cells(10, 4).Value = w_sum
        Cells(11, 4).Value = smb_sum
        Cells(12, 4).Value = total

    Next j

End Sub

1 个答案:

答案 0 :(得分:0)

您可以将变量声明为工作表:

Dim ws As Worksheet

然后,您可以将Sheets(j).Activate绑定到工作表编号ws,而不是调用j

Set ws = Sheets(j)

然后你可以使用ws.cell(i, 4).value代替cells(i, 4).value,而isGrounded往往表现得任意。

希望这有帮助