Не удается найти строку нулевого элемента ParamArray - PullRequest
0 голосов
/ 06 июля 2018

У меня есть массив, где в столбце А перечислены разные названия статей. Теперь я хочу сложить значения, соответствующие некоторым из этих названий статей. Поскольку количество имен статей не является постоянным, я передаю имена в виде ParamArray.

Все это хорошо работает для элементов от одного до конца ParamArray, но появляется сообщение об ошибке «Переменная объекта или переменная блока не установлена», когда я пытаюсь найти строку номера статьи, помещенную в ParamArray (0) , Тем не менее, доступ к ParamArray (0) не является проблемой, но Vba отказывается найти соответствующую строку.

Вот код, вызывающий функцию (col_ML - это столбец суммируемых значений):

.Cells(63, col_year).Value = Compute_sum_ML(col_ML, "17.8.32.000", "17.8.42.000")

Вот сама функция:

Function Compute_sum_ML(col_ML As Integer, ParamArray article() As Variant) As Double

  Dim row_article As Integer
  Dim result As Double

  row_article = 0
  result = 0

  For i = 0 To UBound(article, 1)
    row_article = d_ML.Range("A:A").Find(What:=article(i),LookIn:=xlValues).row
    If row_article <> 0 Then
      result = result + d_ML.Cells(row_article, col_ML).Value
    End If
  Next i

  Compute_sum_ML = result
End Function

Также я попытался определить ParamArray как строку, поскольку ему будут переданы только строки, но это вынуждает меня определить его как вариант.

1 Ответ

0 голосов
/ 06 июля 2018

У меня работает следующее. Я заменил ссылку на кодовое имя вашего листа на Worksheets("Sheet1").

Примечание. Я добавил тест для определения соответствия.

Option Explicit
Public Sub test()
    Debug.Print Compute_sum_ML(2, "17.8.32.000", "17.8.42.000")
End Sub

Public Function Compute_sum_ML(ByVal col_ML As Integer, ParamArray article() As Variant) As Double
    Dim row_article As Long, i As Long, result As Double, found As Range

    row_article = 0
    result = 0

    For i = 0 To UBound(article, 1)
        Set found = Worksheets("Sheet1").Range("A:A").Find(What:=article(i), LookIn:=xlValues)
        If Not found Is Nothing Then
            row_article = found.Row
            result = result + Worksheets("Sheet1").Cells(row_article, col_ML).Value
         'Exit For  ''<==If only one match wanted.
        End If
        Set found = Nothing
    Next i
    Compute_sum_ML = result
End Function

Данные:

data

...