VBA运行时错误9

时间:2015-08-04 13:19:22

标签: excel vba excel-vba runtime-error

我目前收到的错误是下标超出范围。在代码行上

If Sheets(Master).Cells(i, A).Value = AssetNum.Value Then

我尝试使用for循环来增加i,因此行范围从12开始并且每次都加1。然后在for循环中我想使用If语句来检查并查看单元格(i,A)是否等于AssetNum中的值。如果循环达到EmptyRow的值,它将结束循环。我不完全确定如何正确使用for循环IF-THen语句。

Public i As Integer

Private Sub AssetNum_Change()

End Sub

Private Sub Enter_Click()



Dim EmptyRow As Long

'Audit will only search Master Sheet
Worksheets("Master").Activate


'Find empty row value so we can use that for limit of search
With Sheets("Master")
     EmptyRow = .Range("A" & Rows.Count).End(xlUp).Row + 1
End With

'i needs to be set to minimum limit
'Begin loop of search
For i = 12 To EmptyRow + 1

If Cells(i, 1).Value = AssetNum.Value Then

    'Go to compare userform to display

    Compare.AssetDisplay.Value = AssetNum.Value
    Compare.LocationDisply.Value = Cells(i, 2).Value
    Compare.Show

   End If
 Next i

    'If i gets to emptyrow num then go to non found asset userform
    Unload Me
    NonFoundAsset.Show

2 个答案:

答案 0 :(得分:1)

我假设您将错误引用到该行:

If Cells(i, A).Value = AssetNum.Value Then

好吧,我看不到声明A了。然后VBA自动声明它(建议:总是将工具,选项,需要变量声明变为 ON )。我也没有看到A被初始化,因此其值为0,而且不是Cells的有效参考。因此,下标超出界限。

如果要引用“A”列,请写:

If Cells(i, 1).Value = AssetNum.Value Then

因为“A”是第一列。

答案 1 :(得分:0)

使用如下:

If Sheets(Master).Cells(i, "A").Value = AssetNum.Value Then

还有这一行:

Compare.LocationDisply.Value = Cells(i, "B").Value