VBA嵌套Do Until Loop

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

例如,如果表格(2)第4栏中的人名出现在表格(1)中,那么我想总结他们已经收取的金额(其在表格(2)的第10栏中find)。 电子表格2-16的布局完全相同,只是包含不同数量的条目,数据不同。

我有兴趣计算三笔钱,然后在每张表的顶部显示:两笔钱分别代表两个不同的分部,最后一笔是总计(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 

您可以将variables声明为工作表:

Dim ws As Worksheet

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

Set ws = Sheets(j)

那么你可以使用ws.cell(i, 4).value而不是只是cells(i, 4).value ,它往往performance任意。

希望这可以帮助