Неверное присвоение свойства при возврате коллекции в функции VBA - PullRequest
0 голосов
/ 22 апреля 2020

здесь функция validation_check возвращает ошибку неверного назначения свойства (код 450). когда я не использую ключевое слово set, он возвращает ошибку от validate_check = finalCollection, а когда я использую ключевое слово set, он выделяет cellArray = validation_check(cellArray, C_VAL_LIST_KW) ie, откуда я вызываю функцию. Вот код

Подпрограмма, в которой я вызываю функцию

Sub validate_list()

Call declare_vars

validationRange.Select

Dim rng As Range
Dim colStartCell As Range
Dim colEndCell As Range
Dim cNum As Integer
Dim cellArray
Dim n As Integer
Dim msgboxString As String

n = 0

For Each cell In Application.Selection

    If 0 < InStr(UCase(cell), UCase(C_VAL_LIST_KW)) Then
        cNum = cell.Column

        Set colStartCell = Cells(firstDataRangeRow, cNum)

        'MsThgBox colStartCell.Address

        Set colEndCell = Cells(dataLastRowNum, cNum)
        'MsgBox colEndCell.Address

        Set rng = Range(colStartCell, colEndCell)
        cellArray = split_array(cell)
        cellArray = validation_check(cellArray, C_VAL_LIST_KW)

        ...
        ...
        End Sub

Функция разделения массива возвращает массив, поэтому проблема не в том, что l ie там

проверить функцию проверки:

Option Explicit

Public Function validation_check(arr, metaTag) As Collection

Dim newCollection As New Collection
Dim finalCollection As New Collection
Dim arraySize As Integer
Dim i As Integer
Dim val_index As Integer

arraySize = UBound(arr) - LBound(arr) + 1

For i = 0 To arraySize - 1
    If arr(i) = metaTag Then

        val_index = i
        Exit For
    End If
Next

For i = val_index To arraySize - 1
    newCollection.Add (arr(i))
Next

For i = 1 To newCollection.Count
    If InStr(1, newCollection(i), "#") <> 1 Then
        finalCollection.Add (newCollection(i))
    End If
Next

Set validation_check = finalCollection

End Function

Функция разделения массива

Public Function split_array(cell)

Dim arr1, arraySize
arr1 = Split(cell.Value, ",")
arraySize = UBound(arr1) - LBound(arr1) + 1

For i = 0 To arraySize - 1
    arr1(i) = Trim(arr1(i))
Next i

split_array = arr1

End Function
...