excel - 如何修复以下代码中未找到的对象
问题描述
我正在设置一个新的宏来为一系列单元格分配注释,其中包含来自另一个单元格范围的信息。我不断得到一个
“需要对象”错误。
我在一个更简单的工作簿上运行代码,效果很好。当我适应新的列、工作表、行名和不同的范围时,我遇到了错误。
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”的注释,但它们没有从第二张表中获取任何值。图片已更新以显示最新。
请记住,我主要是在改编已经编写的代码。仍然非常学习和自学。
解决方案
希望我能够正确地重新创建您的数据集。假设您要匹配工作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
表注释中。
试一试,如果您需要任何进一步的帮助,请告诉我。
推荐阅读
- vba - 如何在 Vba 中使用 Xpath 提取数据
- node.js - 在节点 Redis 中更新过期时间而不影响键或值
- python - Django 错误:字段 'id' 需要一个数字,但得到了 'Action'
- javascript - 可以使用 ReactDOM.render(元素类型无效)
- shell - /bin/sh:使用 getopt 解析长选项,格式为 --parameter='value'
- python - 使用 AutoHotKey 打开 Python IDLE
- java - 从画廊加载图像时无法加载空位图
- tfs - 如何将工作项添加到 Azure DevOps Server 项目中的现有工作流?
- reactjs - 如何使用 React js 在 antv 中按地区名称访问地区?
- javascript - 从外部加载 SVG 图像并使用 css 设置样式