大家好,今日继续讲解VBA数组与字典解决方案的第23讲,利用动态数组排重提示错误的解决办法。这讲的内容和上一讲的内容是相关联的,在上一讲的回向中,我提到了上一讲的代码中启动了错误处理程序来忽略一处错误,这是哪里错了呢?
对了,就是代码第一次运行到If UBound(Temp) < 0这个时候的TEMP值是什么呢? Temp = Filter(Arr, Splarr(i)) 此时的Arr还是一个空的集合,是不能够求得TEMP集合的,那么有没有办法把这个错误避免呢?下面我们看看今日的代码改进:
Sub MyNZsz_6() '第23讲 利用数组排重时避免错误提示的方法
Dim Splarr() As String
Dim Arr() As String
Dim Temp() As String
Dim r As Integer
Dim i As Integer
Splarr = Split(Sheets("22").Range("a1"), " ")
ReDim Arr(1)
Arr(1) = Splarr(0)
r = 1
For i = 0 To UBound(Splarr)
Temp = Filter(Arr, Splarr(i))
If UBound(Temp) < 0 Then
r = r + 1
ReDim Preserve Arr(1 To r)
Arr(r) = Splarr(i)
End If
Next
Sheets("23").Range("a5").Resize(r, 1) = Application.Transpose(Arr)
End Sub
代码截图:
代码讲解:
1 在上述代码中我加了三行
ReDim Arr(1)
Arr(1) = Splarr(0)
r = 1
不要小看这三行的意义,这三行相当于把arr提前赋了初始值,这样就避免了代码在执行过程中产生错误了。
上述代码中ReDim Arr(1),是先扩展数组到Arr(1),然后将第一个Splarr()值即Splarr(0)赋给它,由于arr有了第一个值所以此时也应该给r 同步赋值1.
下面我们看代码的运行前后的截图:
今日内容回向:
1 如何避免在排重过程中出现错误?
2 如果不给r同步赋值是否可以呢?