Сохранение динамического диапазона в переменной Range - PullRequest
1 голос
/ 22 марта 2019

Я пытаюсь получить уникальные значения из динамического столбца F и сохранить его в массиве. Я получаю сообщение об ошибке «Требуется объект» для моего кода при установке переменной Selection в динамический диапазон. Пожалуйста, помогите.

Sub UniqueFilter()
Dim tmp As String
Dim arr() As String
Dim Selection As Range
Dim lrow As Long
Dim str As String
Dim cell As Range
Dim sht As Worksheet

Set sht = ThisWorkbook.Worksheets("14Feb19")
sht.Activate

'Set Selection = sht.Range(sht.Cells(1, 6), sht.Cells(Rows.Count, 6).End   (xlUp)).Select

lrow = shData.Range("F" & Rows.Count).End(xlUp).Row
Set Selection = sht.Range("F2:F" & lrow).Select



If Not Selection Is Nothing Then
For Each cell In Selection
  If (cell <> "") And (InStr(tmp, cell) = 0) Then
    tmp = tmp & cell & "|"
  End If
Next cell
End If

 If Len(tmp) > 0 Then tmp = Left(tmp, Len(tmp) - 1)

 arr = Split(tmp, "|")

End Sub

1 Ответ

0 голосов
/ 22 марта 2019

Вы можете достичь своей цели, не используя Выбор вообще. Просто скопируйте содержимое диапазона и перенесите его в массив:

Sub UniqueFilter()
    Dim arr() As String
    Dim tmp As Variant
    Dim lrow As Long
    Dim sht As Worksheet
    Dim index As Integer
    Dim count As Integer

    Set sht = ThisWorkbook.Worksheets("14Feb19")
    sht.Activate

    lrow = sht.Range("F" & Rows.count).End(xlUp).Row

    'Copying and trasposing selected Range
    tmp = Application.Transpose(sht.Range("F2:F" & lrow).Value)

    'Cleaning from temp array all empty values
    count = 1
    For index = 1 To UBound(tmp, 1) - LBound(tmp, 1) + 1
        ReDim Preserve arr(1 To count)
        If tmp(index) <> "" Then
            arr(count) = tmp(index)
            count = count + 1
        End If
    Next

End Sub

(особая благодарность @Nathan_Sav, который помог упростить код)

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