Как я могу заставить Union сотрудничать с Listrows? - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь включить эту запись в свой проект, чтобы удалить сразу несколько строк, основываясь на том, содержат ли они определенное значение. Однако, как только я попадаю в Union, он сталкивается с ошибкой 5. Я предполагаю, что это просто синтаксис, так как я не очень привык работать с диапазонами.

Public Sub IPOSheetProxy_Delete(ByVal value As String)
    Dim currentRow As ListRow
    Dim toDelete As Range
    For Each currentRow In Table.ListRows
    'table is declared elsewhere, but it's sheet1.listobjects(1)
        If currentRow.Range(columnindex:=1) = value Then
            Set toDelete = CombineRanges(currentRow.Range(), toDelete)
            'also tried this
            'For Each currentCol In Table.ListColumns
                'Set toDelete = CombineRanges(currentRow.Range(columnindex:=currentCol.Index), toDelete)
            'Next

        End If
    Next
    If Not toDelete Is Nothing Then toDelete.Delete
End Sub

вот код для CombineRanges:

Private Function CombineRanges(ByVal source As Range, ByVal toCombine As Range) As Range
'credit Mathieu Guindon https://stackoverflow.com/questions/59975239/for-loop-not-fully-cycling-in-excel-vba/59975507#59975507
    If source Is Nothing Then
        'note: returns Nothing if toCombine is Nothing
        Set CombineRanges = toCombine
    Else
        'here's where it breaks, Err 5: invalid procedure call or argument
        Set CombineRanges = Union(source, toCombine)
    End If
End Function

1 Ответ

2 голосов
/ 13 апреля 2020

Сначала уберите скобки после currentRow.Range.

Затем вам нужно перевернуть аргументы в вызове на CombineRanges:

Set toDelete = CombineRanges(toDelete, currentRow.Range)

Подсказка относительно порядок состоит из следующих строк:

If source Is Nothing Then
    'note: returns Nothing if toCombine is Nothing
    Set CombineRanges = toCombine

Если source (а именно first параметр) Is Nothing, тогда вернуть только toCombine. У тебя это было задом наперед.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...