数组类型不匹配

时间:2020-07-10 17:25:38

标签: arrays excel vba

我对VBA有点生锈,尤其是对于数组。我下面有一些代码是目标

  1. 获取给定范围内的值
  2. 删除所有重复项
  3. 根据条件删除一些值(例如:删除空格,删除以7开头的条目等)
  4. 我需要最终范围或数组的大小才能在之后正确地将其插入到工作表中
Function AllAddedParts(FullFilePath As String) As Variant
    
    Dim arrValues As Variant
    Dim arrUnikVals As String
    
    On Error GoTo ErrHandler
    Application.ScreenUpdating = False
    
    Dim src As Workbook
    
    ' OPEN THE SOURCE EXCEL WORKBOOK IN "READ ONLY MODE".
    Set src = Workbooks.Open(FullFilePath, True, True)
    
    ' GET THE TOTAL ROWS FROM THE SOURCE WORKBOOK.
    Dim iTotalRows As Integer
    TotalRows = src.Worksheets("Add - Cancel Report (EV6)").Range("D1:D" & Cells(Rows.Count, "D").End(xlUp).Row).Rows.Count
   
      
    ' COPY DATA FROM SOURCE (CLOSE WORKGROUP) TO THE DESTINATION WORKBOOK.
    Dim iCnt As Integer         ' COUNTER.
    Dim ArrDim As Long: ArrDim = 0
    
    arrValues = src.Worksheets("Add - Cancel Report (EV6)").Range("D4:D" & TotalRows)
    
  
    ' CLOSE THE SOURCE FILE.
    src.Close False             ' FALSE - DON'T SAVE THE SOURCE FILE.
    Set src = Nothing
    
    ' Reove Duplicates
    arrUnikVals = RemoveDupesColl(arrValues)
    
ErrHandler:
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Function

然后调用此函数:

Function RemoveDupesColl(MyArray As Variant) As Variant

    Dim i As Long
    Dim arrColl As New Collection
    Dim arrDummy As Variant
    Dim arrDummy1 As Variant
    Dim item As Variant
    ReDim arrDummy1(LBound(MyArray) To UBound(MyArray))
ThisWorkbook.Worksheets("Sheet1").Range("a2:a66") = MyArray

    For i = LBound(MyArray) To UBound(MyArray) 'convert to string
        arrDummy1(i) = CStr(MyArray(i)) '<------------------THIS IS WHERE I GET THE ERROR, Type mismatch
    Next i
    On Error Resume Next
    For Each item In arrDummy1
       arrColl.Add item, item
    Next item
    Err.Clear
    ReDim arrDummy(LBound(MyArray) To arrColl.Count + LBound(MyArray) - 1)
    i = LBound(MyArray)
    For Each item In arrColl
       arrDummy(i) = item
       i = i + 1
    Next item
    RemoveDupesColl = arrDummy
End Function

我猜这是由于我如何声明ArrValues和MyArray?但是我不知道该如何解决。

在此先感谢您的帮助!

0 个答案:

没有答案