2016-02-08 2 views
0

Пожалуйста, обратите внимание на эту ошибку: enter image description hereСтранный #VALUE! Ошибка

Вот две функции:

Public Function CompareExtra(r1 As Range, r2 As Range) As Long 
    Dim r As Integer, v As Variant, v2 As Variant 
    Dim rr1() As String 
    Dim rr As Range 
    rr1 = Split(r1, ",") 
    For r = LBound(rr1) To UBound(rr1) 
     v = --Trim(rr1(r)) 
     If v <> 0 And v <> "" Then 
     For Each rr In r2 
      v2 = rr.Value 
      If v = v2 Then CompareExtra = CompareExtra + 1 
     Next rr 
     End If 
    Next r 
End Function 


Function getLeast(rng As Range, leastXValues As Long, maxValue As Long, displacement As Long, Optional Sorted As Boolean = True) As String 
    Dim d As Object, AL As Object 
    Dim i As Long, j As Long 
    Dim a As Variant 

    Set d = CreateObject("Scripting.Dictionary") 
    Set AL = CreateObject("System.Collections.ArrayList") 
    a = rng.Value 
    i = UBound(a, 1) 
    j = UBound(a, 2) 
    Do 
    If a(i, j) <> 0 Then d(a(i, j)) = a(i, j) 
    j = j - 1 
    If j = 0 Then 
     j = UBound(a, 2) 
     i = i - 1 
    End If 
    Loop Until i = 0 
    For i = 1 To maxValue 
    d(i) = i 
    Next i 
    a = d.Items() 
    For i = UBound(a) - displacement To UBound(a) - displacement - leastXValues + 1 Step -1 
    AL.Add a(i) 
    Next i 
    If Sorted Then AL.Sort 
    getLeast = Join(AL.ToArray, ", ") 
End Function 

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

+0

Поскольку функция 'getLeast' возвращает строку, тогда как функция' CompareExtra' принимает аргументы диапазона. Когда вы устанавливаете значение ячейки с помощью функции 'getLeast', она устанавливает значение по умолчанию' Value'. И использование этой ячейки в функции «CompareExtra» не создает никаких проблем, потому что Cells также являются областями диапазона. – IzCe

+0

Большое спасибо за четкое объяснение. Не могли бы вы предложить, как это исправить, если это okey – ArthurV

+0

Публичная функция CompareExtra (r1 As String, r2 As Range) должна работать? – ArthurV

ответ

1

Простое решение заключается в использовании вариантов:

Public Function CompareExtra(r1 As Variant, r2 As Variant) As Long 
Function getLeast(rng As Range, leastXValues As Long, maxValue As Long, displacement As Long, Optional Sorted As Boolean = True) As Variant 
Смежные вопросы