【发布时间】:2017-11-26 20:37:56
【问题描述】:
我正在构建代码,该代码可以遍历多个工作表上的列 (B5:B) 以查找匹配值。如果一个工作表的列 (B5:B) 上的值等于工作表名称,则工作表名称将放置在找到该值的相邻列 (C5:C) 上。我不是程序员,但我一直在学习 VBA 来实现这一点。到目前为止,我尝试使用 For Next 循环(从第三张表开始)、Thisworkbook.sheets 中的 For Each ws 方法均未成功。但我似乎无法让它发挥作用。我在互联网上搜索了类似的东西,但没有骰子。任何建议将不胜感激。
Sub MatchingPeople()
Dim c As Variant
Dim lastrow As Long
Dim i As Variant
Dim g As Long
Dim w As Long
i = Sheets("Anthony").Name
g = Sheets("Anthony").Cells(Rows.Count, "C").End(xlUp).Row
For w = 3 To Sheets.Count
lastrow = Sheets(w).Cells(Rows.Count, 2).End(xlUp).Row
Set NewRang = Sheets("Anthony").Cells(g + 1, 3)
On Error Resume Next
With Sheets(w).Range(Cells(5, 2), Cells(lasty, 2))
Set c = .Find(i, LookIn:=xlValues)
If Not c Is Nothing Then
firstaddress = c.Address
Do
NewRang.Value = Sheets(w).Name
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstaddress
End If
End With
Next w
End Sub
【问题讨论】:
-
嗨 Max,我希望你不介意我缩进了你的代码。将来您应该考虑以这种方式缩进,因为它使您(和我们!)更容易阅读您的代码并快速发现一些简单的错误。
-
这里有一些事情要开始:我看到了很多尚未定义的变量。
NewRang、firstaddress和lasty在您在这里使用之前未声明或赋予值:Cells(lasty,2) -
注释掉
On Error Resume Next并单步执行代码可能会发现一些东西。 -
不,我绝对不介意您缩进代码,在您发表评论后我已经开始这样做了。感谢您的建议。