2012-05-25 5 views
0
Function RRel(colmn, Optional offst, Optional rng) 
    If offst Is Nothing Then Set offst = -1 
    If rng Is Nothing Then Set rng = Application.Caller 
    RRel = Intersect(colmn, rng.offset(offst, 0).EntireRow) 
End Function 

Когда я пытаюсь использовать это как формулу Excel, например, =RRel(P:P) я получаю сообщение об ошибке:'объект требуется' в функции vba для excel?

Compile error: 

object required 

И точка отладки на заголовке функции

+0

Что вы пытаетесь достичь? Из вашего кода это выглядит как 'offst' - это число. Изменить 'If offst Is Nothing Then Set offst = -1' to' If offst = 0 Then offst = -1' Но вопрос все еще остается ... Что вы пытаетесь сделать? –

ответ

0

Я не понимаю, почему вам нужен UDF, чтобы сделать это: почему бы просто не использовать формулы Excel? В любом случае, если вы настаиваете, вы можете попробовать следующее:

Function RRel(colmn As Range, Optional offst As Variant, Optional rng As Variant) As Variant 
    If IsMissing(offst) Then offst = -1 
    If IsMissing(rng) Then Set rng = Application.Caller.Offset(offst, 0) 
    RRel = Intersect(colmn.EntireColumn, rng.EntireRow).Value 
End Function 
+0

Если я использую формулы, то если я поставлю A2 '= B2 + A1' и A3 '= B3 + A1' (ctrl-D), то, если я скопирую и вставлю строку 2 над строкой 3, то строка 3 станет строкой 4 и формула в A4 (была A3) становится «= B4 + A2», вместо «= B4 + A3», которая беспорядочно вычисляет вычисление – IttayD

+0

По-прежнему не понимаю - должна ли ваша формула A3 быть = B3 + A2? В любом случае ваша функция будет делать то же самое, что и Excel, когда вы вставляете строку A3 = B3 + RREL (A: A) такая же, как = B3 + A2, вставляете строку, и она становится = B4 + A3 –

+0

Когда я вставляю строку он становится = B4 + A2. это проблема, которую я пытаюсь преодолеть. я видел, что могу использовать проверку ошибок формулы, но это легко забыть, и я не единственный, кто обновляет лист – IttayD

Смежные вопросы