在我的工作簿中,D列中有一个公式,用于派生C列中值的后六位数。这些列位于标题为" JE"的表格中。我有一个动态SQL连接查询,其中包含A列中的值。该查询位于标题为" required_refs"的工作表中。基本上,我想写一下:如果D列单元格中的值匹配/等于sheet" required_refs"中该查询中的任何值,请在表单JE中将F列单元格变为红色。
示例:如果单元格D10的值等于" required_refs"中A列中的任何值,请将单元格F10变为红色。此外,如果单元格D13具有匹配/等于工作表" required_refs"中A列中的值的值,则将F13变为红色。等等。
这是我试过的代码。我在Sheet" JE"中添加了它: 代码:
Sub ChangeCellColor()
Dim ref_code As Range: Set ref_code = Range("D7:D446").Value
Dim refCode_Confirm As Range: Set refCode_Confirm = Worksheets("required_refs").Range("A:A").Value
Dim colorChange As Range: Set colorChange = Worksheets("required_refs").Range("A:A")
For Each cell In ref_code
If cell.Value = refCode_Confirm.Value Then
Range("F7:F446").ActiveCell.Interior.ColorIndex = 3
Next cell
End If
End Sub
目前,此代码无法执行任何操作。它不会将F列单元格变为红色。我已经问了一个与此类似的问题但是,我使用的工作簿从那以后改变了一堆,这个问题比前一个问题简单得多。 如果有人可以提供帮助,我真的很感激。谢谢!
答案 0 :(得分:0)
您的代码存在许多问题。
.Value
返回基本类型,如字符串或long。您无法将其分配给范围变量。End If
和Next cell
语句被换掉了。 始终 使用正确的缩进,以便这些错误变得更加明显。cell
。这可能会导致错误。在VBE中,启用Tools > Options > Editor > Required Variable Declaration
选项以强制在新模块中使用Option Explicit
。解决这些问题导致我们:
Sub ChangeCellColor()
Dim cell As Range
Dim ref_code As Range: Set ref_code = Range("D7:D446")
Dim refCode_Confirm As Range: Set refCode_Confirm = Worksheets("required_refs").Range("A:A")
Dim colorChange As Range: Set colorChange = Worksheets("required_refs").Range("A:A")
For Each cell In ref_code
If cell.Value = refCode_Confirm.Value Then
Range("F7:F446").ActiveCell.Interior.ColorIndex = 3
End If
Next cell
End Sub
不幸的是,它仍然无效,因为您无法直接将单个值与VBA中的一列值进行比较。
以下代码更正了此剩余问题。请注意选择好的有意义的名称以及使用RVBA作为变量。这是一个很好的提示,如何避免类似的错误。另请注意使用.Value2
代替.Value
。这是高度推荐。
Sub ChangeCellColor()
Dim rngRef As Range
Dim rngRefsToCheck As Range: Set rngRefsToCheck = Range("D7:D446")
Dim rngRequiredRefs As Range: Set rngRequiredRefs = Worksheets("required_refs").Columns("A")
Dim rngColorChangeRequired As Range: Set rngColorChangeRequired = Columns("F")
For Each rngRef In rngRefsToCheck
If Not IsError(Application.Match(rngRef.Value2, rngRequiredRefs, 0)) Then
rngColorChangeRequired.Cells(rngRef.Row).Interior.ColorIndex = 3
End If
Next rngRef
End Sub
实现颜色变化的最佳和最快方法是使用高级过滤器,从而避免循环。但是,由于你还在学习基础知识,我已经展示了循环版本。