2016-11-14 4 views
0

Я получил общее количество столбцов и попытался добавить его в строку таким образом, что это 1,2,3,4,5 в зависимости от количества столбцов.Удалите повторяющиеся строки на основе динамического количества столбцов

Sub DeleteHighlightedRecords() 

numofCol = "" 

    For i = 1 To lcol 

     numofCol = numofCol & "," & i 

    Next i 

numofCol = Mid(numofCol, 2) 

ThisWorkbook.Worksheets(1).Cells.RemoveDuplicates Columns:=Array(numofCol), Header:=xlNo 
End Sub 

Приведенный выше код я должен будет соответствовать комбинации я помещенный в Array(), а затем удалить дубликаты Я.? Исправьте меня, если я ошибаюсь, однако я получаю ошибку, определяемую приложением.

Как настроить динамические числа столбцов в массиве()?

+0

Передача аргумента столбцов 'RemoveDuplicates' сложна. Какая ошибка вы получаете, точно? @Ralph: речь идет не о удалении дубликатов из массива, а из столбцов, заданных массивом. – arcadeprecinct

+0

Я получаю Runtime Error 1004, если вам интересно узнать, однако @arcadeprecinct уже предоставил решение ниже. –

+0

Да, это я ;-) Мне было просто любопытно, потому что я получал несколько необычных ошибок при тестировании – arcadeprecinct

ответ

3

Array(1,2,3) - это не то же самое, что и Array("1,2,3"). Первый будет создавать 3-элементный массив, содержащий 1,2 и 3, второй будет генерировать 1-элементный массив, содержащий строку "1,2,3".

Для создания фактического массива мы можем сделать следующее:

Dim numOfCol() As Variant 'normally I would choose Long instead of variant but that gave a type mismatch error 
    Dim i As Long 'always use "Option Explicit" at the top of your module! 
    ReDim numOfCol(0 To (lcol - 1)) 'has to be 0-based for RemoveDuplicates 

    For i = 0 To (lcol - 1) 
     numOfCol(i) = i + 1 
    Next i 

Теперь, как при использовании Variant массива вместо Long массива и используя 0 на основе массива было недостаточно, RemoveDuplicates, по-видимому, также может 't обрабатывать аргументы, переданные как ссылка на переменную вместо значения. Чтобы передать переменную как значение, а не ссылку, заключите ее в круглые скобки. Это заставляет переменную оцениваться, а затем передается функции.

ThisWorkbook.Worksheets(1).Cells.RemoveDuplicates Columns:=(numOfCol), Header:=xlNo 
+0

Спасибо @arcadeprecinct за ваш совет. Отлично работает. –

Смежные вопросы