1

我有一些适用于两列的 VBA 代码:A 列和 B 列。基本上,它遍历 B 列,并尝试在 A 列中找到每个 B 列值。此外,A 列中的某些值有一个单元格(内部)蓝色的颜色。

所以可能有3个结果:

  1. 如果在 A 列中未找到 B 列值,则该 B 列值将其单元格(内部)颜色设置为红色。
  2. 如果在 A 列中找到 B 列值,并且 A 列中的值具有蓝色单元格(内部)颜色,则该 B 列值的单元格(内部)颜色设置为黄色。
  3. 如果在 A 列中找到 B 列值,并且 A 列中的值没有蓝色单元格(内部)颜色,则该 B 列值将其单元格(内部)颜色设置为绿色。

第 1 点有效,但是用于分隔第 2 点和第 3 点的 IF 检查不起作用。所有这些情况都会自动转到第 3 点。

有人可以识别问题吗?

代码:

Sub Looper()

Dim i As Integer
Dim Sel As String
Dim MoveDown As String
Dim sourceVal As String
Dim Program As String


Dim i2 As Integer
Dim MoveDown2 As String
Dim Sel2 As String
Dim destVal As String
Dim found As Boolean


i = 2

MoveDown = "YES"

MoveDown2 = "YES"
i2 = 2

Do Until MoveDown = "DONE"
    Sel = "B" + Replace(Str(i), " ", "")
    sourceVal = Range(Sel).Value
    If Range(Sel).Value = "" Then
        MoveDown = "DONE"
    Else
        MoveDown2 = "YES"
        i2 = 2
        found = False
        Do Until MoveDown2 = "DONE"
            Sel2 = "A" + Replace(Str(i2), " ", "")
            destVal = Range(Sel2).Value
            If Range(Sel2).Value = "" Then
                MoveDown2 = "DONE"
            Else
                If destVal = sourceVal Then
                    If Range(Sel2).Interior.Color = vbBlue Then
                        Range(Sel).Interior.Color = vbYellow
                    Else
                        Range(Sel).Interior.Color = vbGreen
                    End If
                    found = True
                End If
            End If
            i2 = i2 + 1
        Loop
        If found = False Then
            Range(Sel).Interior.Color = vbRed
        End If
    End If
    i = i + 1
Loop
End Sub
4

1 回答 1

0

您的代码工作正常,并且可以按照您的预期执行,但是我在这里看到了两个潜在问题

  1. 当 asourceVal找到两个或更多匹配时会发生什么destVal......蓝色destVal将设置为sourceVal黄色,但随后的非蓝色匹配会将其变回绿色,除非您Exit Loopfound = True

  2. 在 Excel 2010 中,蓝色不是蓝色!!!当您手动为单元格着色时,即使工具提示建议为蓝色,它也不是真正意义上的蓝色vbBlue......检查这个Debug.Print Range(Sel2).Interior.Color

在此处输入图像描述

于 2013-07-31T07:54:19.160 回答