Нужно ли использовать функцию Excel VBA WorksheetFunction для выбора на нужном рабочем листе? - PullRequest
0 голосов
/ 16 октября 2019

У меня есть следующий код, но я должен выбрать рабочий лист, в противном случае функция Worksheet возвращает ошибку:

Function Find_Allocation_Acct_Row_Number(allocation_acct As String, allocation_cc As String)
Dim WS As Worksheet
Dim CC_row As Integer
Dim search_rng As Range

Set WS = Sheets(allocation_cc)
WS.Select

Set search_rng = WS.Range("E1:E2000")

CC_row = WS.Application.WorksheetFunction.Match(allocation_acct,search_rng, 0)

Find_Allocation_Acct_Row_Number = CC_row + 4
End Function

Как выбрать правильный диапазон на нужном рабочем листе, не используя команду Select?

Чтобы было ясно, я ВСЕГДА найду значение. Мне просто нужно вернуть строку, чтобы я мог создать диапазон из нее.

Я пробовал несколько разных способов изменить "search_rng" на разные переменные или выражения Range, но не повезло.

Я получаю ошибку:

Run-time error '1004':
Unable to get the Match property of the WorksheetFunction class

1 Ответ

1 голос
/ 16 октября 2019

Если совпадение не найдено, оно выдаст ошибку и остановит код. Если мы поздно свяжем совпадение и отправим результат в вариант, мы можем проверить на наличие ошибки:

Function Find_Allocation_Acct_Row_Number(allocation_acct As String, allocation_cc As String) As Long
    Dim WS As Worksheet
    Set WS = Worksheets(allocation_cc)

    Dim search_rng As Range
    Set search_rng = WS.Range("E1:E2000")

    Dim CC_row As Variant
    CC_row = Application.Match(allocation_acct, search_rng, 0)

    If Not IsError(CC_row) Then
        Find_Allocation_Acct_Row_Number = CC_row + 4
    Else
        Find_Allocation_Acct_Row_Number = -1
    End If
End Function

Теперь, если совпадение не может быть найдено, оно вернет -1

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