VBA处理空数组错误

Tal*_*guy 7 error-handling excel vba excel-2003

我正在编写一个脚本,它将循环遍历我的电子表格,并查找是否有任何重复的所选单元格.如果有重复,那么该函数将返回一个行是重复的数组,并创建一个注释告诉我哪些行是重复的.我已经能够处理错误0但是现在当我使用UBound函数检查数组中是否存在元素时,我得到错误9.有没有人知道如何验证整数数组,如果它是空的或不是因为我的代码似乎没有完成这项工作.以下是我的代码

Function IsArrayEmpty(anArray As Variant) As Boolean
    Dim i As Integer

    On Error Resume Next
        i = UBound(anArray, 1)
    Select Case (Err.Number)
        Case 0
            IsArrayEmpty = True
        Case 9
            IsArrayEmpty = True
        Case Else
            IsArrayEmpty = False
    End Select
End Function
Run Code Online (Sandbox Code Playgroud)

Dr.*_*ius 7

试试这个来检查一个空数组:

Dim arr() As String

If (Not arr) = -1 Then
   Debug.Print "empty"
Else
   Debug.Print "UBound is " & UBound(X)
End If  
Run Code Online (Sandbox Code Playgroud)

HTH!

  • 我声称没有特别的知识,但显然这种检查空数组的方法是利用VBA中的错误而不应该使用:http://stackoverflow.com/questions/183353/how-do-i-determine-if -an-阵列被初始化功能于VB6/183356#183356 (3认同)

Ale*_* K. 7

您的函数失败,因为如果没有引发错误UBound()(即数组的大小),Err.Number则为0并且:

Case 0
  IsArrayEmpty = True
Run Code Online (Sandbox Code Playgroud)

执行时返回错误的结果.

最简单的方法是捕获错误:

Function IsArrayEmpty(anArray As Variant) As Boolean
On Error GoTo IS_EMPTY
If (UBound(anArray) >= 0) Then Exit Function
IS_EMPTY:
    IsArrayEmpty = True
End Function
Run Code Online (Sandbox Code Playgroud)