摘要:《VBA数组与字典方案》教程(10144533)是我推出的第三套教程,目前已经是第二版修订了。这套教程定位于中级,字典是VBA的精华,我要求学员必学。7.1.3.9教程和手册掌握后,可以解决大多数工作中遇到的实际问题。
《VBA数组与字典方案》教程(10144533)是我推出的第三套教程,目前已经是第二版修订了。这套教程定位于中级,字典是VBA的精华,我要求学员必学。7.1.3.9教程和手册掌握后,可以解决大多数工作中遇到的实际问题。
这套字典教程共两册,一共八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:第二十三讲:动态数组去除重复值时错误提示的解决方法
【分享成果,随喜正能量】一切痛苦的根源在于我执。我执的因在於:我们沉溺在贪、嗔、痴、慢、疑的泥沼里不能自拔,有时明明知道自己这样去想、这样去做不对,但仍然让自己的心像脱缰的野马一样横冲直撞,纵容自己为所欲为,造身业、造口业、造意业,让自己痛苦不堪,扰乱自心、扰乱众生心。谨记:一念放下,万般自在。。
大家好,今日继续讲解VBA数组与字典解决方案的第23讲,利用动态数组排重提示错误的解决办法。这讲的内容和上一讲的内容是相关联的,在上一讲的回向中,我提到了上一讲的代码中启动了错误处理程序来忽略一处错误,这是哪里错了呢?
对了,就是代码第一次运行到If UBound(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)
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
代码截图:
代码讲解:在上述代码中我加了三行
ReDim Arr(1)
Arr(1) = Splarr(0)
r = 1
不要小看这三行的意义,这三行相当于把arr提前赋了初始值,这样就避免了代码在执行过程中产生错误了。
上述代码中ReDim Arr(1),是先扩展数组到Arr(1),然后将第一个Splarr值即Splarr(0)赋给它,由于arr有了第一个值所以此时也应该给r 同步赋值1.
下面我们看代码的运行前后的截图:
通过上述的改进,就可以避免错误的发生。
今日内容回向:
1 如何避免在排重过程中出现错误?
2 如果不给r同步赋值是否可以呢?
我多年的VBA实践经验,全部浓缩在以下教程中:
来源:VBA语言专业教育