Excel VBA:For循环用于迭代Sheet范围

时间:2013-08-14 20:46:59

标签: excel excel-vba for-loop do-while vba

在下面的程序中,我要做的是扫描用户填写的工作簿中特定范围的工作表的“是”列,以及用户在该特定范围内放置“x”的任何位置“是” “列范围,它将标识该行中标记的问题的关联项目,并将与该问题相关联的项目代码(例如C3)复制到”摘要“页面中以进行记录。

问题是,当for循环遍历所需的工作表范围时,代码不会按预期将项目复制到摘要页面上。但是,如果我注释掉for循环代码并编写Sheets(6).Select而不是Sheets(i)。例如,选择它会将“x”标记的项目复制到工作表索引#6的摘要页面上。这让我相信我的代码复制+粘贴部分工作(在while循环语句之间),但for循环以某种方式失败。

有人可以帮我确定错误的来源吗?我理解这段代码效率不高,例如过度使用.select和非动态声明,但是如果我想尽可能多地保留相同的代码,我怎么能修改它以使它循环遍历所有代码我想要的床单?

由于

Sub DSR_Autofill()

' Variable Declarations:

Dim x_count As Long     'keeps track of how many "x"s you have
Dim i As Long           'for loop index
Dim n As Long           'while loop index
Dim item_a As String    'Letter part of Item
Dim item_b As String    'Number part of Item

' Variable Initializations:

x_count = 0             'start x count at zero

' Clear Previous Data:

Sheets(2).Range("A25:A29").ClearContents        'Clear Summary Pages before scanning through
Sheets(3).Range("A18:A200").ClearContents

' Main Data Transfer Code:

For i = 5 To i = 20         'Starts at "Process Control" and ends on "Product Stewardship"

    Sheets(i).Select       'Select current indexed worksheet and...
    Range("D15").Select     '...the first item cell in the "Yes" Column
    n = 0                   'initialize n to start at top item row every time

        Do While ActiveCell.Offset(n, -3) <> Empty      'Scan down "YES" column until Item Column (just "A" Column)...
                                                        '...has no characters in it (this includes space (" "))
            If (ActiveCell.Offset(n, 0) = "x" _
            Or ActiveCell.Offset(n, 0) = "X") Then      'If an "x" or "X" is marked in the "YES" column at descending...
                                                        '...cells down the column, at an offset specified by the for loop index n

                item_a = ActiveCell.Offset(n, -3).Value     ' Store Letter value
                item_a = Replace(item_a, "(", "")           ' Get rid of "(", ")", and " " (space)
                item_a = Replace(item_a, ")", "")           ' characters that are grabbed
                item_a = Replace(item_a, " ", "")

                item_b = ActiveCell.Offset(n, -2).Value     ' Store number value
                item_b = Replace(item_b, "(", "")           ' Get rid of "(", ")", and " " (space)
                item_b = Replace(item_b, ")", "")           ' characters that are grabbed
                item_b = Replace(item_b, " ", "")

                x_count = x_count + 1                       ' increment the total x count

                    If (x_count > 5) Then                   ' If there are more than 5 "x" marks...

                        Sheets("SUMMARY P.2").Activate      ' ...then continue to log in SUMMARY P.2 and...
                        Range("A18").Select                 ' ...choose "Item" column, first cell
                        ActiveCell.Offset((x_count - 6), 0).Value = (item_a & item_b)

                        'Insert concatenated value of item_a and item_b (for example "A" & "1" = "A1")
                        'at the cells under the "Item" column, indexed by x_count

                    Else                                    ' If there are less than 5 "x" marks...

                        Sheets("SUMMARY P.1").Activate      ' ...log in SUMMARY P.1 and...
                        Range("A25").Select                 ' ...choose "Item" column, first cell
                        ActiveCell.Offset((x_count - 1), 0).Value = (item_a & item_b)

                    End If

            End If

            n = n + 1
            Sheets(i).Select        'Return back to current sheet before running again
            Range("D15").Select

        Loop            'syntax for continuation of while loop

Next i          'syntax for continuation of for loop

If (x_count > 5) Then               'Bring user back to the Summary Page where the last Item was logged

    Sheets("SUMMARY P.2").Select

Else

    Sheets("SUMMARY P.1").Select

End If

End Sub

1 个答案:

答案 0 :(得分:1)

取出For line中的第二个“i =”:

For i = 5 To 20