Найти строку из одного столбца на другом листе и обратный адрес - PullRequest
1 голос
/ 09 ноября 2019

Я пытаюсь найти строку, которая находится в определенном столбце на другом листе (в данном случае имя «Компания»). Вот что я написал («CompanyName» - это строка поиска):

Public Function GetCompanyNumber(CompanyName) As String
    ThisWorkbook.Worksheets("Company").Select
    Range("B:B").Select
    GetCompanyNumber = Selection.Find(What:=CompanyName, After:=[A1], LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Address
End Function

Однако каждый раз, когда происходит сбой с Select method range class failed, я возвращаюсь в строку Range("B:B").Select. Я написал это так, что мой поиск ограничен только столбцом B (предпочтительно в пределах ячейки B20). Как я могу это исправить?

Спасибо.

Если это имеет значение, строка поиска содержит специальные символы, такие как ö

Ответы [ 2 ]

2 голосов
/ 09 ноября 2019

Лучше сначала проверить, приводит ли Find() к ошибке, а если нет, то установите GetCompanyNumber на найденный адрес ячейки

Кроме того, поскольку вы ищете специальные символы, я думаю, чтобыло бы более адекватно использовать LookIn:=xlValues вместо LookIn:=xlFormulas

Public Function GetCompanyNumber(CompanyName As String) As String
    Dim rng As Range

    Set rng = ThisWorkbook.Worksheets("Company").Range("B:B").Find(What:=CompanyName, LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False, SearchFormat:=False)

    If Not rng Is Nothing Then GetCompanyNumber = rng.Address
End Function
1 голос
/ 09 ноября 2019

Я не совсем понимаю, почему вы получаете именно эту ошибку, но это действительно не имеет значения, так как лучшая альтернатива - избегать выбора полностью:

Public Function GetCompanyNumber(CompanyName) As String
    Dim ws As Worksheet
    Dim r As Range

    Set ws = Worksheets("Company")
    Set r = ws.Range("B:B").Find(What:=CompanyName, After:=[A1], LookIn:=xlFormulas, _
     LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
     MatchCase:=False, SearchFormat:=False)
    If Not r Is Nothing Then GetCompanyNumber = r.Address
End Function

Почти никогда не бывает веской причиныиспользовать Select в программировании VBA. См. Как избежать использования Select в Excel VBA? , чтобы узнать, как этого избежать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...