Страницы: 1
RSS
пользовательская функция выдает ошибку #ЗНАЧ! при использовании на разных листах
 
Уважаемые форумчане!
Большая просьба посмотреть файл. В нем необходимая для меня функция не работает нормально. При переключении с листа на лист функция выдает ошибку  #ЗНАЧ!
Голову сломал уже.
 
Название с нарушением Правил, поэтому пока только теоретически подскажу (а то модераторы и мне выговор влепят).
Если планируете аргументы функции брать с разных листов, то в коде это надо учитывать. Указывать родительский объект для аргументов-диапазонов(см. свойство .Parent)
Согласие есть продукт при полном непротивлении сторон
 
Sanja,бьюсь уже битый час не пойму, к своему сожалению, как туда свойство Parent прописать :cry:.  
 
Название для темы предложите вменяемое
Согласие есть продукт при полном непротивлении сторон
 
а как заменить? ни разу не менял
 
не 'заменить', а 'предложить', здесь-же, в сообщении
Согласие есть продукт при полном непротивлении сторон
 
предлагаю!!
например:
Работоспособность пользовательских функций на разных листах документа Excel
или
пользовательская функция выдает ошибку #ЗНАЧ! при использовании на разных листах
 
Код
Function TBO(cel As Range, num_vhoda As Range, usmin As Integer, usmax As Integer)
Application.Volatile
Dim ax()
'ошибка начало?????????????????????
With cel.Parent
    y = .Cells(cel.Row, cel.Column).Column
    i = .Cells(cel.Row, cel.Column).Row
    h = .Cells(.Rows.Count, y).End(xlUp).Row
    arr = Application.Transpose(.Range(.Cells(i, y), .Cells(h, y))) 'операция транспорта в одномерный массив
End With
'ошибка конец?????????????????????

Min = usmin
Max = usmax
l = LBound(arr)
h = UBound(arr)
'============================= удаляются занчения из массива не подходящие под условия
For i = 1 To h
    If arr(i) > Min And arr(i) < Max Then
         N = N + 1
        ReDim Preserve ax(N) ' Preserve переопределение с сохр всех значений
        ax(N) = arr(i)
    End If
Next i
arr = ax
'====================== сортировка
First = LBound(arr)
h = UBound(arr)
For i = First To h - 1
    For j = i + 1 To h
        If arr(i) > arr(j) Then
            Temp = arr(j)
            arr(j) = arr(i)
            arr(i) = Temp
        End If
    Next j
Next i
isk = num_vhoda.Parent.Cells(num_vhoda.Row, num_vhoda.Column).Row   'и тут тоже
On Error GoTo Err_SomeName
   TBO = arr(isk)
Exit_SomeName:
     Exit Function
Err_SomeName:
    TBO = 0
Resume Exit_SomeName

End Function
Согласие есть продукт при полном непротивлении сторон
 
Преогромнейшие человеческое спасибо. Шикарно заработало!
Страницы: 1
Наверх