【问题标题】:VBA How to continue showing arrays elements after nothingVBA如何在无事后继续显示数组元素
【发布时间】:2020-09-07 11:42:45
【问题描述】:

我的 excel 宏有问题。 我想在 excel 文件中查找名称并将其复制到不同的单元格。 我创建了一个带有名称和 FOR 循环的数组来检查它。在那个 for 循环中,我正在从数组中查找名称。问题是:如果单元格程序中没有来自数组的名称,则程序停止并给我 MsgBox "No name: " + people(j) 并在此程序停止后。是否可以给用户信息“文件中没有那个名称”并跳过此迭代?

非常感谢您的帮助!

这是我的代码:

Sub wyszukaj()
    Dim persons As Variant
    persons = Array("Dawid", "Mikael", "John", "Alice", "Katerine")
    Dim rowNum As Long
    Dim foundRowNum As String
    Dim findName As String
    Dim j As Long

    For j = LBound(persons) To UBound(persons)
        Dim found As Range
        Dim curSheet As Worksheet
        Dim LastCell As Range
        Dim FirstAddr As String
        With Range("A:A")
            Set LastCell = .Cells(.Cells.Count)
        End With
        Dim nothingInCell As Object
        Set nothingInCell = Nothing

        Set FoundCell = Range("A:A").Find(persons(j), After:=LastCell)

        If FoundCell Is Nothing Then
            MsgBox ("No name: " + persons(j))
        End If

        Debug.Print FoundCell.Value

        If Not FoundCell <> persons(j) Then
            FirstAddr = FoundCell.Address
        End If
        Next j

        Dim counter As Integer
        Dim i As Integer
        counter = 0

        Do Until FoundCell Is Nothing
            counter = counter + 1
            Set FoundCell = Range("A:A").FindNext(After:=FoundCell)
            If FoundCell.Address = FirstAddr Then
                Exit Do
            End If
        Loop

        foundRowNum = FoundCell.Address
        rowNum = Range(foundRowNum).Row

        For i = rowNum To rowNum + counter - 1
            Cells(i, 1).Copy Cells(i, 8)
            Cells(i, 2).Copy Cells(i, 9)
        Next i
End Sub

【问题讨论】:

    标签: vba loops for-loop iteration skip


    【解决方案1】:

    你需要使用如下结构:

    If FoundCell Is Nothing Then 
        'nothing found
    Else
        'something found
    End If
    

    所有依赖FoundCell的部分都需要在上面的Else部分中。

    Sub wyszukaj()
        Dim persons As Variant
        persons = Array("Dawid", "Mikael", "John", "Alice", "Katerine")
        Dim rowNum As Long
        Dim foundRowNum As String
        Dim findName As String
        Dim j As Long
    
        For j = LBound(persons) To UBound(persons)
            Dim found As Range
            Dim curSheet As Worksheet
            Dim LastCell As Range
            Dim FirstAddr As String
            With Range("A:A")
                Set LastCell = .Cells(.Cells.Count)
            End With
            Dim nothingInCell As Object
            Set nothingInCell = Nothing
    
            Set FoundCell = Range("A:A").Find(persons(j), After:=LastCell)
    
            If FoundCell Is Nothing Then
                'nothing found
                MsgBox ("No name: " + persons(j))
            Else
                'something found
                Debug.Print FoundCell.Value
        
                If Not FoundCell <> persons(j) Then
                    FirstAddr = FoundCell.Address
                End If
            End If
        Next j
    
        Dim counter As Long
        Dim i As Long
        counter = 0
    
        Do Until FoundCell Is Nothing
            counter = counter + 1
            Set FoundCell = Range("A:A").FindNext(After:=FoundCell)
            If FoundCell.Address = FirstAddr Then
                Exit Do
            End If
        Loop
    
        foundRowNum = FoundCell.Address
        rowNum = Range(foundRowNum).Row
    
        For i = rowNum To rowNum + counter - 1
            Cells(i, 1).Copy Cells(i, 8)
            Cells(i, 2).Copy Cells(i, 9)
        Next i
    End Sub
    

    【讨论】:

    • 天哪,这么简单...非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 2019-12-28
    • 2016-09-17
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多