Excel宏生成Subscript超出范围错误

时间:2014-12-19 13:06:18

标签: excel vba excel-vba do-while

所有三张纸在第1行中都有相同的列标题。在工作簿的第一张和第二张纸上(标题为"每月"和"年度"分别),我正在使用根据公式确定的值,条件格式化为Y和AC列中的单元格着色(如果计算返回小于90的值,则为黄色;如果返回的值为0,则为红色,或者为负数)。我希望宏做的是将整个行从A列复制到AD列到第三张(标题为" Maint Due")。如果这个过程是自动化的,那么任何时候Y和AC列中的值在"每月"中发生变化也是很好的。或"年度"表格," Maint Due"工作表是自动更新的(但是如果我必须手动重新运行宏来实现它并不是什么大问题)。

我从未使用过宏录制器,我只能弄清楚如何创建一个复制和粘贴的宏,所以我没有运气。在做了一些搜索和观看一些视频后,我拼凑了这个:

Sub Show_on_Maint()
x = 2
'Sets the starting row

    Do While Cells(x, 2) <> ""
    'Continue to evaluate until a blank cell is reached
    If Cells(x, 25) <= 90 Then
        'Evaluates the cell in column Y to determine if the value 
        '     is less than or equal to 90
        Sheets("Monthly").Rows(x).Copy Sheets("Maint Due").Range("A2")
        'Copies the row to the Maint Due sheet
    Else
        If Cells(x, 29) <= 90 Then
            'Evaluates the cell in column AC to determine if the value 
            '     is less than or equal to 90
            Sheets("Monthly").Rows(x).Copy Sheets("Maint Due").Range("A2")
            'Copies the row to the Maint Due sheet
        End If
    End If
    x = x + 1
    Loop

End Sub

当我运行/调试它时,我得到一个没有Do错误的循环。我认为我的逻辑是合理的,但我没有足够的经验来弄清楚为什么我会收到这个错误。

编辑:修复了在x = x + 1

之前缺失的结束

现在我收到运行时错误9&#34;下标超出范围&#34;在:Sheets("Sheet1").Rows(x).Copy Sheets("Sheet6").Range("A2")

编辑:固定工作表名称。宏现在运行没有错误,但似乎没有做任何事情。为简洁起见,还编辑了主要帖子。

1 个答案:

答案 0 :(得分:0)

您的代码段包含多个错误。第一个没有Do错误的循环&#39;已在评论中修复。第二个,&#39;下标超出范围&#39;是自我描述性的,因此请通过添加

来检查x+1的最大值
Debug.Print x = x + 1

到你的循环。另外,请确保您没有在复制语句中引用不存在的工作表(即Sheets("Sheet6"))。

希望这会有所帮助。