Excel VBA – 适用于1个单元格,不能修改多行

谢谢你的帮助。 试图寻找几个小时。 我几乎有这个macros完美的工作,我只是不知道如何做一个微小的修改:

这一个完美的作品,但只有1行:

Sub UpdateStatusTest01() Dim s1 As Worksheet, s2 As Worksheet Set s1 = Sheets("test") Set s2 = Sheets("SIGNUPS") v1 = s1.Range("A2") v2 = s1.Range("B2") s2.Activate For Each r In Intersect(ActiveSheet.UsedRange, Range("A:A")) If r.Value = v1 Then r.Offset(0, 1).Value = v2 End If Next End Sub 

我希望它移到“SIGNUPS”工作表的下一行,并且继续为B2之后的行find/匹配/replaceB列数据。 如果我尝试修改

 v1 = s1.Range("A2") v2 = s1.Range("B2") 

 v1 = s1.Range("A:A") v2 = s1.Range("B:B") 

代码变成了

 Sub UpdateStatusTest01() Dim s1 As Worksheet, s2 As Worksheet Set s1 = Sheets("test") Set s2 = Sheets("SIGNUPS") v1 = s1.Range("A:A") v2 = s1.Range("B:B") s2.Activate For Each r In Intersect(ActiveSheet.UsedRange, Range("A:A")) If r.Value = v1 Then r.Offset(0, 1).Value = v2 End If Next End Sub 

但是excel不喜欢这一行:

 If r.Value = v1 Then 

只有当修改的范围从1个单元格更改为一个整列时才会发生。 确切的错误是“运行时错误13”:types不匹配“。

我知道我想修改那个麻烦的一行,但我不知道该如何处理一个具有多个单元格的范围。 我会很感激任何帮助! 谢谢!!

VBA根本不明白你想要什么。 要么遍历每个可能性或做一个像这样的查找:

 Sub UpdateStatusTest01() Dim s1 As Worksheet, s2 As Worksheet Dim v1 As Range, v2 As Range Set s1 = Sheets("test") Set s2 = Sheets("SIGNUPS") Set v1 = s1.Range("A:A") Set v2 = s1.Range("B:B") s2.Activate For Each r In Intersect(ActiveSheet.UsedRange, Range("A:A")) If IsNumeric(Application.Match(r.Value, v1, 0)) Then r.Offset(0, 1).Value = Application.Index(v2, Application.Match(r.Value, v1, 0)) End If Next End Sub 

希望这是你正在寻找的(对我来说不是100%清楚你想要什么)。

它只是简单地检查v1是否有你想要的值,并从同一行打印v2的值。

错误本身就是因为你试图比较( = )一个VBA不可能的数组。

然而,像这样简单的任务也可以通过工作表公式完成)