我是StackOverflow和VBA的新手。我是Excel的所有方面的专家,除了从头开始在VBA中编写代码。
我想要做的是将索引中的颜色应用到单元格内部(如果它包含特定术语)。这就是我所拥有的:
Sub ConditionalFormatting()
Do Until ActiveCell = ""
If ActiveCell = "STAR DISTRICT" Then
ActiveCell.Interior.ColorIndex = 50
ElseIf ActiveCell = "STAR SCHOOL" Then
ActiveCell.Interior.ColorIndex = 50
ElseIf ActiveCell = "HIGH PERFORMING" Then
ActiveCell.Interior.ColorIndex = 43
ElseIf ActiveCell = "SUCCESSFUL" Then
ActiveCell.Interior.ColorIndex = 34
ElseIf ActiveCell = "ACADEMIC WATCH" Then
ActiveCell.Interior.ColorIndex = 38
ElseIf ActiveCell = "LOW PERFORMING" Then
ActiveCell.Interior.ColorIndex = 22
ElseIf ActiveCell = "AT RISK OF FAILING" Then
ActiveCell.Interior.ColorIndex = 18
ElseIf ActiveCell = "FAILING" Then
ActiveCell.Interior.ColorIndex = 3
Else: ActiveCell.Interior.ColorIndex = 1
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub
选项包括: 星区或学校, 高绩效, 成功, 学术观察, 表现不佳, 面临失败的风险, 失败的
此代码适用于一列(底部两个术语除外),但它不适用于工作表中的任何其他位置。当我在其他地方尝试它时,无论细胞包含什么,所有细胞都会变成黑色(或ColorIndex = 1)。
非常感谢任何帮助。
特伦顿
答案 0 :(得分:1)
如果没有在Excel电子表格中看到您的输入数据,很难确切说明为什么会这样:
This code works for one column (except for the bottom two terms) but it will not work anywhere else in the worksheet. When I try it anywhere else, all of the Cells turn Black (or ColorIndex = 1) no matter what the cell contains.
但是,默认情况下,VBA中的字符串比较是二进制比较,这意味着它将区分大小写,并且您将ActiveCell
与各种大写字符串进行比较。如果您的Excel电子表格包含除大小写之外的所有内容,则所有测试都将失败。
你需要做两件事之一。首先,您可以将Option Compare Text
添加到代码表的顶部。这会将所有比较更改为Text
而不是Binary
比较。
或者您可以将每个ActiveCell
包装在UCASE
函数中,这将在执行比较之前将活动单元格中的任何值大写:
If UCase(ActiveCell) = "STAR DISTRICT" Then
...
ElseIf UCase(ActiveCell) = "STAR SCHOOL" Then
...
...
...
End If
编辑:
正如您在评论中提到的,问题是在单元格值中尾随空格,相应的代码修复是在ActiveCell
函数中包装Trim
。你可以将函数嵌套在彼此内部,如:
If UCase(Trim(ActiveCell)) = "STAR DISTRICT" Then
...
ElseIf UCase(Trim(ActiveCell)) = "STAR SCHOOL" Then
...
...
...
End If
这将从ActiveCell
中的值中修剪任何尾随和前导空格,然后将其设置为大写以与您的标记值进行比较。
答案 1 :(得分:1)
我不确定您要在哪个范围应用此代码。从我在您的代码中看到的,您希望VBA在 ActiveCell 上应用此“格式化”,然后在下面选择另一个单元格并重复“条件格式化”过程,然后选择另一个单元格({{1}等等,直到它偶然发现第一个空单元格。
为此,代码基本上应该工作(我已经尝试过)并根据你的条件改变它处理的单元格的内部颜色索引。因为这个宏适用于 ActiveCell的一列中的单元格到最后一个非空单元格我不明白你打算如何在两列上使用它。
此宏将任何单元格转换为ColorIndex为1的原因可能只是它包含的文本不属于“条件列表”。另外请记住,UPPERCASE和LOWERCASE是不同的字符,因此单元格中的值必须与代码中的单词/字符串完全匹配大写/小写,或者您可以增强代码以将单词中的所有字母转换为大写(使用例如ActiveCell.Offset(1, 0).Select
您可以尝试使用此代码将相关格式应用于所选范围内的每个单元格:
UCase