错误9超出范围的下标尝试了所有内容

时间:2016-01-08 14:54:42

标签: excel vba excel-vba

Set finder = .Find(clientName, LookIn:=xlValue, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext)行接收运行时错误9下标超出范围,我尝试了很多东西来修复它。我在这里缺少一些重要的东西,我不确定它是什么。仔细阅读这里的所有其他帖子,似乎没有人过于紧密地帮助/关联。

注意事项: 1)变量clientName是传递给函数时正确估值的标准字符串。 2)我通过在查找行之前添加contactsMaster.Activate行来测试工作表对象,并且它正确地激活到工作表,这使我相信它与名称无关工作表或工作簿(我在主要子文件中使用getBook = Activeworkbook.Name,以避免用户更改名称时出现问题。 3)我已将范围更改为contactsMaster.Range("A:C")也没有改变任何事情。 4)数据存储在A到C列中。每个单元一个客户端名称。此函数旨在通过客户端名称标准化命名约定方法,以便我可以使用相同的约定从任何宏中查找文件。 5)最初我认为在错误行上使用.Address由于某种原因引发了错误,但似乎并非如此,因为我删除了它并仍然收到错误错误。代码如下:

Function GetClientName(clientName As String) As String

'Gets specific client name to save excel file in a standardized format to be found easily

    'Sets Objects/vars
    Dim finder As Range
    Dim location As Long
    Dim contactsMaster As Worksheet

    Set contactsMaster = Workbooks("EEB MACRO DEVELOPMENT BOOK").Sheets("Contacts Master")

    With contactsMaster.Range("A1:C1000")
       Set finder = .Find(clientName, LookIn:=xlValue, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext)
    End With

    'Prevents error for not finding client in contacts master
    If finder Is Nothing Then
        GoTo endFunc
    End If

    location = finder.Row

    GetClientName = contactsMaster.Cells(location, 1)

    Exit Function

endFunc:

    GetClientName = clientName
End Function

1 个答案:

答案 0 :(得分:1)

你只需要将它LookIn:=xlValues,最后注意“S”。此外,您使用的是Lookin:=LookAt:=,所以为了保持连续性,我建议您在开始时添加What:=,以便获得:

Set finder = .Find(What:=clientName, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext)