VBA数组与字典方案:动态数组去除重复值时错误提示的解决方法

360影视 2025-02-02 18:46 2

摘要:《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语言专业教育

相关推荐