首页 > 解决方案 > 处理数组以避免错误

问题描述

在userform1中,我有以下代码

Private Sub cmdOK_Click()
    Dim i As Long
    With Me.ListBox2
        If .ListCount = 0 Then MsgBox "You Have To Select At Least One Column", vbExclamation: GoTo Skipper
        ReDim aCols(0 To .ListCount - 1)
        For i = 0 To .ListCount - 1
            aCols(i) = "[" & ListBox2.List(i, 0) & "]"
        Next i
    End With
Skipper:
    Unload Me
End Sub

在标准模块中,我将 aCols 声明为 public

Public aCols

如果 listbox2 没有项目,则 aCols 变为空,而如果有项目,则 aCols 变为数组。然后在另一个代码中,我对如何避免错误感到困惑

If UBound(aCols) > -1 Then

如果 aCols 不为空,这可以正常工作,但如果 aCols 为空,我会遇到错误。如何处理这两种情况我只需要避免错误并处理 aCols 要么它是空的,要么它是一个数组。

标签: excelvba

解决方案


Function safeUBound()由于 OERN,我会使用它看起来很丑,但效果很好:

Function safeUBound(a)
    
    safeUBound = -1
    On Error Resume Next
    safeUBound = UBound(a)
    
End Function

另一种解决方案是在代码的最开头或在用户窗体初始化时将空数组或空二维数组分配给变量。aCols


推荐阅读