Страницы: 1
RSS
Пользовательская функция Индекс
 
Добрый день!

В файле имеется сводная техн. карта и техн. карты по культурам, в которых пользователем указывается техника. Задача в том, чтобы в сводную техн. карту собрать технику со всех тематических карт. В столбце "B" в значении ячеек есть косвенное указание в виде аббревиатуры на тематический лист, в котором необходимо произвести поиск, а также уникальный код ТО.

Подскажите в какой части кода пользовательской функции мной допущена ошибка:
Код
Вариант 1:
Function wbFind(IDRange As Range, iNumberColumn As Long, StCell As String, Number1 As Integer, Number2 As Integer)

    wbFind = Thisworkbooks.Sheets("ТК_" & Left(IDRange.Value, 3)).Columns(iNumberColumn) _
            .Find(IDRange.Value, Range(StCell), xlValues, xlWhole, xlByRows, xlNext).cell.Offset(Number1, Number2).Value

End Function

Вариант 2:
Function WbIndex(IDRange As Range, iRangeValue As String, iRangeCri As String)
    
    WbIndex = Application.WorksheetFunction.Index(Thisworkbooks.Sheets("ТК_" & Left(IDRange.Value, 3)).Range(iRangeValue), _
            WorksheetFunction.Match(IDRange, Thisworkbooks.Sheets("ТК_" & Left(IDRange.Value, 3)).Range(iRangeCri), 0))

End Function
 
Вместо "Thisworkbooks" напишите "Thisworkbook".
 
Большое спасибо! Теперь можно отдохнуть:)
 
И что, обе заработали?
 
Заработал WbIndex
 
Для другой функции так:
Код
Function wbFind(IDRange As Range, iNumberColumn As Long, StCell As String, Number1 As Integer, Number2 As Integer)
    Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("ТК_" & Left(IDRange.Value, 3))
    wbFind = sh.Columns(iNumberColumn) _
            .Find(What:=IDRange.Value, After:=sh.Range(StCell), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
            SearchDirection:=xlNext).Offset(Number1, Number2).Value
End Function

PS. Хоть в коде и указан параметр "After", но если не будет найдено, то поиск продолжится и в ячейках "B1:B7".
 
Супер, работает. Проблема была в формировании имени листа?
 
Проблема была в cell.
Ну и в s, как выше уже говорили.
Вообще я был уверен что Find в UDF не работает. Т.е. в процедуре, или в функции работает, а в UDF нет. Но как вижу - работает себе... Может с 2010 версии поправили, или я что-то путаю?
Изменено: Hugo - 05.08.2018 20:37:19
Страницы: 1
Наверх