Excel VBA循环仅通过一张图纸
我创建了一个函数,返回工作簿中所有工作表中特定范围内的值的总和,并将其与标量相乘。For循环意味着通过sheet Count属性一直到书中的最后一张纸,但我将其减少到2张纸,以帮助我找出哪里出了问题 目前,For循环在一次迭代后退出,我无法从代码中找出原因。Do循环正在正常解决。非常感谢您的帮助Excel VBA循环仅通过一张图纸,excel,vba,for-loop,spreadsheet,Excel,Vba,For Loop,Spreadsheet,我创建了一个函数,返回工作簿中所有工作表中特定范围内的值的总和,并将其与标量相乘。For循环意味着通过sheet Count属性一直到书中的最后一张纸,但我将其减少到2张纸,以帮助我找出哪里出了问题 目前,For循环在一次迭代后退出,我无法从代码中找出原因。Do循环正在正常解决。非常感谢您的帮助 Public Function FPP_Total() Dim Book As Workbook: Set Book = ActiveWorkbook Dim sheetCount As Intege
Public Function FPP_Total()
Dim Book As Workbook: Set Book = ActiveWorkbook
Dim sheetCount As Integer: sheetCount = Book.Sheets.Count
Dim total As Long
Dim rowCount As Integer
Dim currentSheet As Worksheet
rowCount = 2
For i = 3 To 5
Set currentSheet = Book.Sheets(i)
Do
total= (total+ currentSheet.Cells(rowCount, 3).Value)
rowCount = rowCount + 1
Loop Until IsEmpty(currentSheet.Cells(rowCount, 1).Value)
Next
FPP_Total = total * 5
结束函数看起来您正在尝试对从
C2
到列中最后一行的每张表求和
与创建嵌套循环(@TheJeebo将其确定为问题的根源)不同,您可以简单地确定有问题的动态范围,并一次性将该范围相加,如下所示。将其嵌套在图纸循环中以获得所需的结果
看起来您正在尝试将每张表从
C2
汇总到列中的最后一行
与创建嵌套循环(@TheJeebo将其确定为问题的根源)不同,您可以简单地确定有问题的动态范围,并一次性将该范围相加,如下所示。将其嵌套在图纸循环中以获得所需的结果
你有没有检查过你的密码?它可以在每一张纸上循环,但不是按你认为应该的方式求和。似乎你不需要你的
do
循环。只需使用Application.WorksheetFunction.Sum([range])
@urderboy,我会这样做,但随着项目(行)的添加或删除,各个工作表的范围可能会有所不同。Do循环允许这种灵活性,因为数据被分割成块,其中至少有一个空行/COLLMN将其分割。您可以创建动态范围。此外,每次转到新工作表时,rowCount都会不断迭代,因此每次都会跳过。请尝试将rowCount=2放入循环中,因为您是否已完成代码?它可以在每一张纸上循环,但不是按你认为应该的方式求和。似乎你不需要你的do
循环。只需使用Application.WorksheetFunction.Sum([range])
@urderboy,我会这样做,但随着项目(行)的添加或删除,各个工作表的范围可能会有所不同。Do循环允许这种灵活性,因为数据被分割成块,其中至少有一个空行/COLLMN将其分割。您可以创建动态范围。此外,每次转到新工作表时,rowCount都会不断迭代,因此每次都会跳过。尝试将rowCount=2放入For循环中。我理解动态范围选项,但当一个空行(或几行)分隔一列中表示不同数据的两组行时,它的行为如何。例如,在我的特殊情况下,工作表的顶行是列名/标题,直到第41行,然后是两个空白行,然后是另一行列标题,下面是进一步的数值。就像两张桌子,一张在另一张下面。在这种情况下,动态范围的表现如何?它会像我需要的那样停在那一空行上吗?还是会把那一列中的所有值都考虑进去?这些是你可以自己测试的语句,仅供参考(只需运行它并找出答案)。如果您这样做了,那么在当前状态下,您应该注意到这将一直延续到最后使用的行。我将进入列的最底部,基本上使用CTRL-SHIFT-UP
查找最后一个单元格。相反,听起来您希望从顶部使用CTRL-SHIFT-DOWN
。所以请尝试lr=ws.Range(“C1”).End(xlDown).Row
我理解动态范围选项,但是当一个空白行(或少数行)分隔一列中表示不同数据的两组行时,它的行为如何。例如,在我的特殊情况下,工作表的顶行是列名/标题,直到第41行,然后是两个空白行,然后是另一行列标题,下面是进一步的数值。就像两张桌子,一张在另一张下面。在这种情况下,动态范围的表现如何?它会像我需要的那样停在那一空行上吗?还是会把那一列中的所有值都考虑进去?这些是你可以自己测试的语句,仅供参考(只需运行它并找出答案)。如果您这样做了,那么在当前状态下,您应该注意到这将一直延续到最后使用的行。我将进入列的最底部,基本上使用CTRL-SHIFT-UP
查找最后一个单元格。相反,听起来您希望从顶部使用CTRL-SHIFT-DOWN
。所以尝试lr=ws.Range(“C1”).End(xlDown)。行
Public Function FPP_Total()
Dim ws As Worksheet 'Worksheet
Dim lr As Long 'Last Row
Dim total As Long
Dim i as Long
For i = 3 To ThisWorkbook.Sheets.Count
Set ws = ThisWorkbook.Sheets(i)
lr = ws.Range("C" & ws.Rows.Count).End(xlUp).Row
total = Application.WorksheetFunction.Sum(ws.Range("C2:C" & lr))
Next i
FPP_Total = total * 5
End Function