0

我发现了其他几个处理变体的问题,但似乎没有一个能解决我的问题。

我有非常简单的 for 循环进行比较。目的是在不匹配的情况下将 Excel 单元格着色为红色。结果是 99% 准确的,但我注意到一些看似随机的错误。例如,包含数字 104875 的单元格不是红色的,这表示比较列中应该有匹配的单元格。但是没有。似乎它们都应该是错误的或都是正确的。其他一些关于变体的线程提到比较必须是相同的类型,否则你会得到奇怪的错误。就我而言,它们属于同一类型(都是整数),所以这不是问题。

我是 VBA 的新手,仍然试图了解它是如何工作的。

这是代码的相关部分:

Private Sub CommandButton1_Click()

Dim i As Long, j As Long
Dim flag As Boolean
Dim array1() As Variant, array2() As Variant
Dim column1 As Double
Dim column2 As Double

column1 = convertColumn(TextBox1.Text)
column2 = convertColumn(TextBox2.Text)

Set wb1 = Workbooks("Advocate July 2017 Data.xlsm").Sheets(1)
Set wb2 = Workbooks("BI Report 8-18-17.xlsm").Sheets(1)

array1 = Intersect(wb1.Columns(column1), wb1.UsedRange)
array2 = Intersect(wb2.Columns(column2), wb2.UsedRange)


For i = 2 To UBound(array1)
    flag = False
    For j = 2 To UBound(array2)
        If IsNumeric(array1(i, 1)) And IsNumeric(array2(j, 1)) Then If CDbl(array1(i, 1)) = CDbl(array2(j, 1)) Then flag = True
        Next j
    If Not flag Then wb1.Cells(i, column1).Interior.Color = vbRed
Next i
End Sub

编辑:原来我的代码工作正常。问题只是其中一张床单上的一些单元格被隐藏了,我没有意识到这一点。~facepalm~这就是我在excel中没有经验所得到的

4

1 回答 1

0

尝试简化您的代码,使其易于复制。例如,假设您要比较活动表中A列和B列中的前 50 个单元格。输入一些值,它将如下所示:

Option Explicit

Public Sub TestMe()

    Dim array1      As Variant
    Dim array2      As Variant
    Dim i           As Long
    Dim j           As Long
    Dim flag        As Boolean

    With ActiveSheet
        array1 = .Range("A1:A50")
        array2 = .Range("B1:B50")
        .Range("A1:A10").Interior.Color = vbWhite

        For i = LBound(array1) To UBound(array1)
            flag = False

            For j = LBound(array2) To UBound(array2)
                If array1(i, 1) = array2(j, 1) Then flag = True
            Next j

            If Not flag Then .Cells(i, 1).Interior.Color = vbRed
        Next i

    End With

End Sub

然后尝试使解决方案适应您的解决方案。它应该工作。

于 2017-08-23T13:41:45.503 回答