【问题标题】:Excel VBA: For Loop for iteration through Sheet rangeExcel VBA:For循环遍历工作表范围
【发布时间】:2013-08-17 00:15:36
【问题描述】:

在以下程序中,我要做的是扫描用户填写的工作簿中特定工作表范围的“是”列,以及用户在该特定“是”中放置“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

【问题讨论】:

    标签: excel for-loop do-while vba


    【解决方案1】:

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

    For i = 5 To 20
    

    【讨论】:

    • O_O 哇...哈哈...谢谢!你给我的其他代码很酷,但我无法修改原始代码,因为很多人使用这个程序。
    • 不用担心,很高兴为您提供帮助:)
    猜你喜欢
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 2020-04-05
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多