Arrays 如果数组为空,则VBA继续

Arrays 如果数组为空,则VBA继续,arrays,vba,loops,Arrays,Vba,Loops,我对VBA非常陌生。我目前正在创建一个脚本,希望它能节省我很多时间 我只是想知道,如果数组未满,如何跳过错误?例如,1循环检查数组是否有名字和姓氏,如果没有姓氏,我希望脚本继续。 FullName = ActiveSheet.Cells(37, ii).Value Name = Split(FullName, " ") For intCount = LBound(Name) To UBound(Name) sData.Range("C" & iii).Value = Name(0



我对VBA非常陌生。我目前正在创建一个脚本,希望它能节省我很多时间

我只是想知道,如果数组未满,如何跳过错误?例如,1循环检查数组是否有名字和姓氏,如果没有姓氏,我希望脚本继续。

FullName = ActiveSheet.Cells(37, ii).Value
Name = Split(FullName, " ")

For intCount = LBound(Name) To UBound(Name)
  sData.Range("C" & iii).Value = Name(0)
  sData.Range("D" & iii).Value = Name(1)
Next
如果
Name(1)
为空,那么代码如何继续

带有一些测试值

Option Explicit

Sub test()

Dim ii As Long
Dim iii As Long

ii = 2
iii = 3

Dim FullName As String
Dim Name() As String

With ActiveSheet

    FullName = .Cells(37, ii).Value

    If InStrRev(FullName, " ", -1) > 0 Then   'space present

        Name = Split(FullName, " ")

        If UBound(Name) > 1 Then Exit Sub 'there was more than one space present. Handling this was not specified so exit sub.

        .Range("C" & iii).Value = Name(0)
        .Range("D" & iii).Value = Name(1)

    Else

         .Range("C" & iii).Value = FullName
         .Range("D" & iii).Value = vbNullString

    End If

End With

End Sub

如果要避免在错误恢复下一步时使用
,可以尝试以下操作:

FullName = ActiveSheet.Cells(37, ii).Value
Name = Split(FullName, " ")

If Len(Join(Name)) > 0 Then
    sData.Range("C" & iii).Value = Name(0)
    sData.Range("D" & iii).Value = Name(1)
End If

原来是贴出来的
Join
基本上恢复为全名值,但没有空格。或者,如果InStr(1,FullName,“,vbBinaryCompare)>0,则可以使用
,然后使用
,因为这两列是连续的,所以可以将数组粘贴到位,使用
Range.Resize
可根据需要跨多个列转储数组-唯一需要注意的是
Name
是否可以包含多个空格:

FullName = ActiveSheet.Cells(37, ii).Value
Name = Split(FullName, " ")
If UBound(Name) <= 1 Then
    sData.Range("C" & iii).Resize(, UBound(Name) + 1).Value = Name
Else
    'there was more than one space...
End If
FullName=ActiveSheet.Cells(37,ii).Value
名称=拆分(全名为“”)

如果UBound(Name)FYI显示
intCount
循环是完全冗余的;第二次迭代将覆盖第一次迭代所做的一切。