在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
答案 0 :(得分:1)
你只需要将它LookIn:=xlValues
,最后注意“S”。此外,您使用的是Lookin:=
,LookAt:=
,所以为了保持连续性,我建议您在开始时添加What:=
,以便获得:
Set finder = .Find(What:=clientName, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext)