2013-07-31 26 views
1

我有两个工作在两列的VBA代码:列A和列B.基本上,它在列B上循环,并尝试在列A中查找每列B值。 ,列A中的某些值具有蓝色的单元(内部)颜色。VBA宏没有正确检测内部或字体颜色

所以可以有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 
+0

检查该被细胞人工蓝色或者它是条件格式化的结果? – JosieP

回答

0

您的代码工作正常,并做了你希望它做什么,但是我在这里看到

  1. sourceVal发现两个或两个以上时会发生什么两个潜在的问题匹配destVal ...蓝色destVal将设置为sourceVal黄色,但随后的非蓝色匹配会将其重新变为绿色,除非您在found = True之后

  2. 在Excel 2010中蓝色不是蓝色!当你遮阳手工细胞,即使在提示表明蓝色,它是不是真的蓝色的vbBlue感....由Debug.Print Range(Sel2).Interior.Color

enter image description here