2016-11-14 57 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

如果您有興趣瞭解運行時錯誤1004,但是@arcadeprecinct已經提供了下面的解決方案。 –

+0

是的,這是我;-)我只是好奇,因爲我在測試 – arcadeprecinct

回答

3

Array(1,2,3)Array("1,2,3")不一樣。第一個將生成包含1,2和3的3元素數組,第二個將生成包含字符串"1,2,3"的1元素數組。

要創建一個實際的數組,我們可以做到以下幾點:

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顯然也可以處理作爲參數傳遞給變量而不是值的參數。要將變量作爲值傳遞而不是引用,請將其包含在括號中。這會導致變量被評估並傳遞給函數。

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

時遇到了多個不常見的錯誤感謝@arcadeprecinct您的建議。它像一個魅力。 –