首页 > 解决方案 > 如何修复以下代码中未找到的对象

问题描述

我正在设置一个新的宏来为一系列单元格分配注释,其中包含来自另一个单元格范围的信息。我不断得到一个

“需要对象”错误。

我在一个更简单的工作簿上运行代码,效果很好。当我适应新的列、工作表、行名和不同的范围时,我遇到了错误。

    Dim rngCell As Range
    Dim strComment As String, strConsolidated As String, strPERSON As String, strConcat As String
    Dim arrConcat() As String
    Dim lngPos As Long
    Dim WIPDATA As Worksheet
    Dim Display As Worksheet
    Set WIPDATA = Worksheets("WIPDATA")
    Set Display = Worksheets("Display")


    For Each rngCell In WIPDATA.Range("I2:I278")
        strConcat = strConcat & rngCell & rngCell.Offset(0, -7) & "||"
    Next rngCell

    arrConcat = Split(strConcat, "||")

    For Each rngCell In Display.Range("D3:F23")
        If rngCell.Value >= 0 Then
            strConsolidated = Right(Display.Cells(rngCell.Row, 1).Value, 1)
            strPERSON = Display.Cells(1, rngCell.Column).Value
            For lngPos = 0 To UBound(arrConcat)
                If LCase$(strConsolidated & strPERSON) = LCase$(arrConcat(lngPos)) Then
                    With WIPDATA
                        strComment = strComment & Chr(10) _
                            & "W/O " & .Range("B" & lngPos + 2).Value & Chr(10) _
                            & "OP# " & .Range("F" & lngPos + 2).Value & Chr(10) _
                            & "Qty " & .Range("I" & lngPos + 2).Value
                    End With
                End If
            Next lngPos
            rngCell.ClearComments
            If Len(strComment) > 0 Then
                rngCell.AddComment (Right(strComment, Len(strComment) - 1))
                rngCell.Comment.Shape.TextFrame.AutoSize = True
            End If
            strComment = vbNullString
        End If
    Next rngCell
     End Sub

如果正确,则将注释添加到范围内的每个单元格中,并带有下表中的相应数据。

这解决了:得到一个

运行时错误“424”对象需要

它需要我到第 5 行。For Each rngCell In WIPDATA.Range("I2:I278")

现在我得到了应用于“E”和“F”的注释,但它们没有从第二张表中获取任何值。图片已更新以显示最新。

请记住,我主要是在改编已经编写的代码。仍然非常学习和自学。

在此处输入图像描述

在此处输入图像描述

标签: excelvba

解决方案


希望我能够正确地重新创建您的数据集。假设您要匹配工作Display表、人员(第 2 行)和合并编号(C 列)WIPDATA、人员(A 列)和合并编号(P 列),那么您需要使用以下代码:

Sub foo()
    Dim rngCell As Range
    Dim strComment As String, strConsolidated As String, strPERSON As String, strConcat As String
    Dim arrConcat() As String
    Dim lngPos As Long

    Dim WIPDATA As Worksheet
    Dim Display As Worksheet
    Set WIPDATA = Worksheets("WIPDATA")
    Set Display = Worksheets("Display")

    For Each rngCell In WIPDATA.Range("A2:A278")
        strConcat = strConcat & rngCell.Offset(0, 15) & rngCell & "||"
    Next rngCell

    arrConcat = Split(strConcat, "||")

    For Each rngCell In Display.Range("D3:F23")
        If rngCell.Value >= 0 Then
            strConsolidated = Display.Cells(rngCell.Row, 3).Value
            strPERSON = Display.Cells(2, rngCell.Column).Value
            For lngPos = 0 To UBound(arrConcat)
                If LCase$(strConsolidated & strPERSON) = LCase$(arrConcat(lngPos)) Then
                    With WIPDATA
                        strComment = strComment & Chr(10) _
                            & "W/O " & .Range("B" & lngPos + 2).Value & Chr(10) _
                            & "OP# " & .Range("F" & lngPos + 2).Value & Chr(10) _
                            & "Qty " & .Range("I" & lngPos + 2).Value
                    End With
                End If
            Next lngPos
            rngCell.ClearComments
            If Len(strComment) Then
                rngCell.AddComment (Right(strComment, Len(strComment) - 1))
                rngCell.Comment.Shape.TextFrame.AutoSize = True
            End If
            strComment = vbNullString
        End If
    Next rngCell
End Sub

Display我这边的工作表显示两条评论(黄色和橙色):

在此处输入图像描述

WIPDATA设置(对不起,我很懒,我只复制了你表的一部分!):

在此处输入图像描述

我只创建了两个工作表之间的 Person 和 Consolidated 匹配的 3 个场景,但希望您能够看到黄色和橙色的行被正确地复制到工作Display表注释中。

试一试,如果您需要任何进一步的帮助,请告诉我。


推荐阅读