Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何修复在以下代码中找不到的对象_Excel_Vba - Fatal编程技术网

Excel 如何修复在以下代码中找不到的对象

Excel 如何修复在以下代码中找不到的对象,excel,vba,Excel,Vba,我正在设置一个新的宏,用另一个单元格区域的信息为一个单元格区域指定注释。我不断收到一封信 “需要对象”错误 我在一个更简单的工作簿上运行了代码,效果非常好。当我适应新的列、表、行名称和不同的范围时,我遇到了错误 Dim rngCell As Range Dim strComment As String, strConsolidated As String, strPERSON As String, strConcat As String Dim arrConcat() A

我正在设置一个新的宏,用另一个单元格区域的信息为一个单元格区域指定注释。我不断收到一封信

“需要对象”错误

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

    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号线<代码>用于WIPDATA.Range(“I2:I278”)中的每个rngCell

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

请记住,我主要是改编已经编写好的代码。在那方面我仍然在学习和教导自己


希望我能够正确地重新创建您的数据集。假设要将
显示
工作表、人员(第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
setup(对不起,我太懒了,只复制了你表格的一部分!):

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


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

什么是
WIPDATA
?我不知道。VBA似乎也不知道。请提供一份报告。可能将
WIPDATA
替换为
Sheets(“WIPDATA”)
。但这是第二张工作表的代码名吗?您可能没有将工作表设置为变量。首先声明变量,然后设置它。这样
将WIPDATA设置为工作表
,然后
设置WIPDATA=工作表(“WIPDATA”)
。还需要进行显示。在任何模块中的所有代码之前添加
Option Explicit
是一个非常好的主意,这将迫使您声明变量,捕捉拼写错误,并帮助调试代码。之后清理也是一个好主意。。。即
设置MyObject=Nothing
。要在所有模块中自动执行
Option Explicit
,请在VBA窗口>工具>选项>编辑器>勾选“需要变量声明”。(事实上,我已经勾选了清单上的所有内容)。添加标签前,请阅读标签说明。我已经删除了你添加的标签,因为描述的第一句话说这个标签正在等待删除,这清楚地表明它不应该在新帖子上使用。更改成功了。但我不明白为什么。这行让我困惑:strConcat=strConcat&rngCell.Offset(0,15)&rngCell&“| |”这行正在创建一个非常长的字符串-它将“合并”(单元格A2+Offset 15列=单元格P2)与“人”(单元格A2)连接起来,添加“| |”分隔符,然后连接P3和A3,添加“| |”分隔符,然后连接P4和A4。。。等等完成后,
strConcat
看起来有点像->
1300Bob | | 1300Bob | | 1400Gary | | 1400Bob | | | | | |……
之后,我们有一行
arrConcat=Split(strConcat,“| |”
,它使用
分隔符将这个巨大的字符串拆分成一个数组。然后,它将在lngPos=0到UBound(arrConcat)
循环中使用。如果有不清楚的地方,请告诉我。好的,这就是所有的配对工作。非常感谢。现在,当涉及到第15行strConsolidated=Display.Cells(rngCell.Row,3).Value时,这将设置C列的strin,并且应该能够通过以下方式移动到U列:strConsolidated=Display.Cells(rngCell.Row,21).Value