VBA测试两个值,如果其中一个不同,复制

20 浏览
0 Comments

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将文本复制到第二个检查中不匹配的单元格中。

如果我没有表达清楚,我很抱歉,这很难解释。

我希望有一个专家知道如何使这个工作。

提前感谢。

0
0 Comments

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函数来解决。另外,文章还提供了一段代码作为示例,用于实现嵌套循环的功能。

0