VBA测试两个值,如果其中一个不同,复制
VBA测试两个值,如果其中一个不同,复制
我在下面的代码中遇到了一些麻烦:
Sub TestEmail() Dim i As Long Dim LastRow As Long Dim a As Worksheet Dim b As Worksheet Dim strText Dim ObjData As New MSForms.DataObject Set a = Workbooks("Book2").Worksheets(1) Set b = Workbooks("Book1").Worksheets(1) LastRow = a.Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To LastRow If Not IsError(Application.Match(a.Cells(i, 7).Value, b.Columns(3), 0)) And IsError(Application.Match(a.Cells(i, 4).Value, b.Columns(11), 0)) Then a.Range("D" & i).Copy ObjData.GetFromClipboard strText = Replace(ObjData.GetText(), Chr(10), "") b.Range("K" & ).Value = b.Range("K" & ).Value & " / " & strText End If Next i End Sub
我面临两个问题,一个让我困惑,另一个是由于缺乏知识:
IF后面的那行代码是为了检查两个工作簿中的两个数值是否匹配,并且另外两个文本值是否不匹配。如果都是真的,那么它必须从Book2复制一个值并将其添加到Book1中的一个单元格中。
问题是:
-宏似乎无法识别数值是否匹配。
-在“End If”之前的最后一行,我不知道如何告诉Excel将文本复制到第二个检查中不匹配的单元格中。
如果我没有表达清楚,我很抱歉,这很难解释。
我希望有一个专家知道如何使这个工作。
提前感谢。
VBA测试两个值,如果其中一个不同,复制的问题出现的原因是使用了"If Not condition 1 And condition 2",这样的语句表示如果两个条件都不满足,则执行代码。而实际上需要使用嵌套的If语句,一个是"If",另一个是"If Not"。此外,在复制时缺少了"i",正确的写法应该是"b.Range("K" & i) = b.Range("K" & i).Value & " / " & strText"。另外,单元格的地址应该在Range函数内部,正确的写法是"a.Range("D" & i).Copy"和"b.Range("K" & i) = b.Range("K" & i).Value & " / " & strText"。也可以使用"b.Range("K" & i) = b.Range("K" & i).Value & " / " & a.Range("D" & i)"。这样只有当两个工作簿上的ID在同一行时才能匹配。如果不是同一行,就需要使用嵌套循环或.Find函数来解决。另外,文章还提供了一段代码作为示例,用于实现嵌套循环的功能。