0

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

问题在于,当 for 循环遍历所需的工作表范围时,代码不会按预期将项目复制到摘要页面上。但是,如果我注释掉 for 循环代码并编写 Sheets(6).Select 而不是 Sheets(i).Select,例如,它将按预期将“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
4

1 回答 1

1

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

For i = 5 To 20
于 2013-08-14T21:05:47.857 回答