Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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 如何在“a”中进行抵销;“对于每个循环”;_Excel_Vba - Fatal编程技术网

Excel 如何在“a”中进行抵销;“对于每个循环”;

Excel 如何在“a”中进行抵销;“对于每个循环”;,excel,vba,Excel,Vba,在嵌套循环中,我试图找出如何指示结果应该放在数组中第二个和第三个工作表的不同列中。对于数组中的第一个工作表,一切都很好。对于第二和第三个工作表,我需要将结果放在下一列中。我只是不知道该在哪里说,这样就不会弄乱循环的“嵌套”部分 我为自己编写了一个嵌套循环而感到非常自豪,直到它不起作用为止。最后,我意识到它在技术上是可行的,但是循环一次又一次地替换同一列的相同单元格,因为我没有指定结果应该被一列覆盖。我发现这看起来很有希望,但有点让我不知所措 Dim SG As Worksheet, SG2017

在嵌套循环中,我试图找出如何指示结果应该放在数组中第二个和第三个工作表的不同列中。对于数组中的第一个工作表,一切都很好。对于第二和第三个工作表,我需要将结果放在下一列中。我只是不知道该在哪里说,这样就不会弄乱循环的“嵌套”部分

我为自己编写了一个嵌套循环而感到非常自豪,直到它不起作用为止。最后,我意识到它在技术上是可行的,但是循环一次又一次地替换同一列的相同单元格,因为我没有指定结果应该被一列覆盖。我发现这看起来很有希望,但有点让我不知所措

Dim SG As Worksheet, SG2017 As Worksheet, SG2018 As Worksheet, SG2019 As Worksheet
    Set SG = Workbooks("Subgroup Summary Template").Sheets("SG")
    Set SG2017 = Workbooks("2017 Subgroup Summary").Sheets("2017")
    Set SG2018 = Workbooks("2018 Subgroup Summary").Sheets("2018")
    Set SG2019 = Workbooks("2019 Subgroup Summary").Sheets("2019")
Dim SGdata As Variant
Dim CurrentSGdata As Variant
    SGdata = Array(SG2017, SG2018, SG2019)
Dim i As Long

'ALL STUDENTS
For Each CurrentSGdata In SGdata
    With CurrentSGdata.Range("A1")
         For i = 3 To 8
         .AutoFilter Field:=7, Criteria1:=i
         .AutoFilter Field:=8, Criteria1:="Total Population"
         .AutoFilter Field:=1, Criteria1:=school
                SG.Cells(i, 3) = CurrentSGdata.UsedRange.SpecialCells(xlCellTypeVisible).Areas(2).Columns(15).Cells(1, 1)
                    On Error Resume Next
                SG.Cells(i, 6) = CurrentSGdata.UsedRange.SpecialCells(xlCellTypeVisible).Areas(2).Columns(17).Cells(1, 1)
                    On Error Resume Next
            CurrentSGdata.AutoFilterMode = False
         Next i
Next CurrentSGdata
例如,我如何指示在第二次迭代的
“CurrentSGdata”
中,
SG.Cells(I,3)
应该变成
SG.Cells(I,4)

例如:

Dim i As Long, n As Long

'ALL STUDENTS
n = 3
For Each CurrentSGdata In SGdata
    With CurrentSGdata.Range("A1")
         For i = 3 To 8
             .AutoFilter Field:=7, Criteria1:=i
             .AutoFilter Field:=8, Criteria1:="Total Population"
             .AutoFilter Field:=1, Criteria1:=school

             On Error Resume Next

             SG.Cells(i, n) = CurrentSGdata.UsedRange.SpecialCells(xlCellTypeVisible) _
                                .Areas(2).Columns(15).Cells(1, 1)

             SG.Cells(i, 6) = CurrentSGdata.UsedRange.SpecialCells(xlCellTypeVisible) _
                                .Areas(2).Columns(17).Cells(1, 1)

             On Error Goto 0 '<< stop ignoring errors

             CurrentSGdata.AutoFilterMode = False
         Next i
     End With 'missing in your code?
     n = n + 1
Next CurrentSGdata
将i变长,n变长
“所有学生
n=3
对于SGdata中的每个CurrentSGdata
使用CurrentSGdata.Range(“A1”)
对于i=3到8
.自动筛选字段:=7,标准1:=i
.自动筛选字段:=8,标准1:=总人口
.自动筛选字段:=1,标准1:=学校
出错时继续下一步
SG.Cells(i,n)=当前sgdata.UsedRange.SpecialCells(xlCellTypeVisible)_
.区域(2).列(15).单元格(1,1)
SG.Cells(i,6)=当前sgdata.UsedRange.SpecialCells(xlCellTypeVisible)_
.区域(2).列(17).单元格(1,1)
错误转到0'时,例如:

Dim i As Long, n As Long

'ALL STUDENTS
n = 3
For Each CurrentSGdata In SGdata
    With CurrentSGdata.Range("A1")
         For i = 3 To 8
             .AutoFilter Field:=7, Criteria1:=i
             .AutoFilter Field:=8, Criteria1:="Total Population"
             .AutoFilter Field:=1, Criteria1:=school

             On Error Resume Next

             SG.Cells(i, n) = CurrentSGdata.UsedRange.SpecialCells(xlCellTypeVisible) _
                                .Areas(2).Columns(15).Cells(1, 1)

             SG.Cells(i, 6) = CurrentSGdata.UsedRange.SpecialCells(xlCellTypeVisible) _
                                .Areas(2).Columns(17).Cells(1, 1)

             On Error Goto 0 '<< stop ignoring errors

             CurrentSGdata.AutoFilterMode = False
         Next i
     End With 'missing in your code?
     n = n + 1
Next CurrentSGdata
将i变长,n变长
“所有学生
n=3
对于SGdata中的每个CurrentSGdata
使用CurrentSGdata.Range(“A1”)
对于i=3到8
.自动筛选字段:=7,标准1:=i
.自动筛选字段:=8,标准1:=总人口
.自动筛选字段:=1,标准1:=学校
出错时继续下一步
SG.Cells(i,n)=当前sgdata.UsedRange.SpecialCells(xlCellTypeVisible)_
.区域(2).列(15).单元格(1,1)
SG.Cells(i,6)=当前sgdata.UsedRange.SpecialCells(xlCellTypeVisible)_
.区域(2).列(17).单元格(1,1)

错误时转到0'
错误时继续下一步
不需要多次,此时应谨慎使用,并进行外科手术。错误会一直被抑制,直到代码告诉它重新打开。一旦您通过了要忽略错误的部分,请立即使用
On Error GoTo 0
,以便突出显示应处理的未来问题。至于您的问题-您可以使用计数器,并为每个
CurrentSGdata
递增它,例如在3处开始
n
,然后使用
SG.单元格(i,n)
Next CurrentSGdata
之前添加1到
n
,感谢您关于
Error resume Next
的注释。我把它放在那里,因为有时代码只需要运行I=3到5,有时,它只会在i=6到8之间运行,我不知道如何让它忽略1004错误并继续运行。
在错误恢复时,下一步不需要多次
,此时应小心使用并进行手术。错误会一直被抑制,直到代码告诉它重新打开。一旦您通过了要忽略错误的部分,请立即使用
On Error GoTo 0
,以便突出显示应处理的未来问题。至于您的问题-您可以使用计数器,并为每个
CurrentSGdata
递增它,例如在3处开始
n
,然后使用
SG.单元格(i,n)
Next CurrentSGdata
之前添加1到
n
感谢您关于
Error resume Next
的注释…我把它放在那里,因为有时候代码只需要运行I=3到5,有时候它只运行I=6到8,我不知道如何让它忽略1004错误并继续运行。啊哈!我从未考虑过添加一个n,然后调整底部的n的可能性。我知道最后会是关于我把便条放在哪里的问题,但我想不出来。也感谢你编辑了关于如何更好地使用“错误恢复”的内容,并指出我缺少结尾。我今天早些时候就在那里。我一定是把它删掉了试着修复其他东西。啊哈!我从未考虑过添加一个n,然后调整底部的n的可能性。我知道最后会是关于我把便条放在哪里的问题,但我想不出来。也感谢你编辑了关于如何更好地使用“错误恢复”的内容,并指出我缺少结尾。我今天早些时候就在那里。我一定是把它删掉了试着修复其他东西。