下标超出范围,即使我已指定范围和工作表

时间:2017-09-27 21:14:57

标签: vba

我收到了代码中最后一段逻辑的下标超出范围错误:

Sub Extract_Bank_Amount()

Dim wb As Workbook
Dim ws As Worksheet
Dim rng1 As Range, rng2 As Range, lastcell As Range
Dim lRow As Long, i As Long

Set wb = ActiveWorkbook
Set ws = wb.Sheets("Bank Statement")

Set rng1 = wb.Sheets("Payroll Journal").Range("B1")
Set rng2 = wb.Sheets("Payroll Journal").Range("B3")
Set lastcell = wb.Sheets("Proof").Range("C3" & Rows.Count).End(xlUp).Offset(1)


 wb.Sheets("Bank Statement").Activate

 With ws

    lRow = .Range("B" & .Rows.Count).End(xlUp).Row

       For i = 2 To lRow

           If .Range("A" & i).Value = rng1 Then
           If .Range("C" & i).Value = rng2 Then
                lastcell = .Range("B" & i).Value
           End If
           End If
    Next i
End With
End Sub

它在这一行给出了一个超出范围的下标:

Set ws = wb.Sheets("Bank Statement")

感谢任何帮助,谢谢。 link to screenshot of sheet

1 个答案:

答案 0 :(得分:1)

看起来就像你的银行对帐单标签的名称在末尾附加了一个空格。

"银行对账单" VS "银行对账单"

我已经测试了你的代码,它没有问题,所以这可能就是答案。

编辑:

要在C列中找到最后一个单元格+1作为指定范围变量,请更改以下内容:

Set lastcell = wb.Sheets("Proof").Range("C3" & Rows.Count).End(xlUp).Offset(1)

Set lastcell = wb.Sheets("Proof").Range("C5000").End(xlUp).Offset(1)

只要您预期的最后一个单元格低于5000,这应该可行。您的Range()需要大于您预期的最高行数。如果您希望有10行数据Range("A50")可行,但如果您有10,000行,则需要Range("A10001")等。