Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA循环仅通过一张图纸_Excel_Vba_For Loop_Spreadsheet - Fatal编程技术网

Excel VBA循环仅通过一张图纸

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

我创建了一个函数,返回工作簿中所有工作表中特定范围内的值的总和,并将其与标量相乘。For循环意味着通过sheet Count属性一直到书中的最后一张纸,但我将其减少到2张纸,以帮助我找出哪里出了问题

目前,For循环在一次迭代后退出,我无法从代码中找出原因。Do循环正在正常解决。非常感谢您的帮助

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