下标使用find超出范围

时间:2018-03-16 13:06:01

标签: excel vba excel-vba

我一直得到

  

"下标超出范围"

.find行上的

错误。

这个想法是用户根据输入框选择一个单元格。然后将复制所选单元格行中的单元格(D)的值,并用于在给定范围内查找Sheet2中的值。

Sub AddNewLine()

Dim Hull As Variant
Dim SST As Variant
Dim NRE_RE As Variant
Dim DropDownN As Range
Dim DropDownR As Range
Dim foundcell As Variant
Dim myCell As Range
Dim Task As Range
Dim WBS As Range

Set DropDownN = Sheets("Sheet2").Range("C3:C6")
Set DropDownR = Sheets("Sheet2").Range("C10:C64")

Sheets("Sheet1").Activate
Set myCell = Application.InputBox(prompt:="Select a Hull to add the task to 
the 7300", Type:=8)
Set Task = myCell.EntireRow


Task.Select

NRE_RE = Task.Cells(4).Value
Hull = Task.Cells(3).Value
SST = Task.Cells(6).Value

If NRE_RE = "NRE" Then
    Sheets("Sheet2").Activate
    With DropDownN
        .Find(What:=SST, LookIn:=xlValue, LookAt:=xlWhole, MatchCase:=True)
    End With
ElseIf NRE_RE = "RE" Then
    Sheets("Sheet2").Activate
    With DropDownR
        .Find(What:=SST, LookIn:=xlValue, LookAt:=xlWhole, MatchCase:=True)
    End With
End If

Sheets("Sheet2").Activate

WBS.Interior.ColorIndex = 3

End Sub

我是编码的新手,并且已经找到了一种让它适用于我的情况而没有运气的方法。我也试图将搜索结果命名为" WBS"这就是" WBS.Interior.ColorIndex = 3"正在引用。

我也意识到我的代码可能不是最简洁的,但随着我的理解会有所改变。这只是我脑海中最简单的过程。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您需要更换行:

.Find(What:=SST, LookIn:=xlValue, LookAt:=xlWhole, MatchCase:=True)

使用Find函数的正确方法,包括以下内容:

  1. Find的结果设置为Range对象。

    Dim FindRng As Range Set FindRng = .Find(What:=SST, LookIn:=xlValue, LookAt:=xlWhole, MatchCase:=True)

  2. 同时处理Find无法找到您要找的内容的情况,第一种情况是SST

    If FindRng Is Nothing Then

  3. 第一个Find

    修改后的代码

    Dim FindRng As Range
    
    Set FindRng = .Find(What:=SST, LookIn:=xlValue, LookAt:=xlWhole, MatchCase:=True)
    If Not FindRng Is Nothing Then
        ' when Find is successfull finding SST
    Else
        ' if Find faild finding SST
    
    End If
    

    注意:您应该避免使用Sheets("Sheet1").ActivateTask.Select,它唯一要做的就是减慢代码的运行时间。