如何使用VBA切换Interior.Color

时间:2016-05-28 21:10:00

标签: excel vba excel-vba

我希望有一个表单控件按钮,使用VBA,如果选择没有内部颜色,则将选择更改为for (String temp2 : secondList) { boolean isTrue = false; for (String temp : firstList) { if (temp.contains(temp2)) { isTrue = true; break; } } if (isTrue) al4.add(1); else al4.add(0); } ;如果选择的内部颜色已经是Selection.Interior.Color = RGB(255, 0, 0)红色。有效切换布尔属性。例如,如果我想切换选择的WrapText属性,我可以使用

Selection.Interior.Color = xlNone

以下步骤不起作用,因为它只是选择Sub ToggleWrapText() ' Toggles text wrap alignment for selected cells If TypeName(Selection) = "Range" Then Selection.WrapText = Not ActiveCell.WrapText End If End Sub ,并且当我再次单击控制表单按钮时不会变回红色。

xlNone

我还尝试了一个Sub mcrToggleRed() ' Toggle the color for selected cells If TypeName(Selection) = "Range" Then Select Case Selection.Interior.Color Case xlNone Selection.Interior.Color = RGB(255, 0, 0) Case Selection.Interior.Color = RGB(255, 0, 0) Selection.Interior.Color = xlNone End Select End If End Sub 循环,它只与上面的If...Then...Else循环具有相同的结果。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

你可以使用Immediate If(IIf)来做这类事情:

Sub mcrToggleRed()
    With Selection.Interior
        .Color = IIf(.Color = xlNone Xor .Color = 16777215, RGB(255, 0, 0), xlNone)
    End With
End Sub

注意:原始代码的实际问题是由于您正在测试xlNone作为默认值。 Gary's Student实际上发布了另一个针对RGB(255, 255, 255)测试的答案 - 这是单元格的.Color属性的实际默认值。

虽然在我的代码中我使用了16777215(这是RGB(255, 255, 255)的返回值) - 我最初忽略了你正在测试错误值的事实,这是Gary的答案会做出的如果它还在这里更清楚。

(Gary发布的替代解决方案(我添加了with his permission))

Sub mcrToggleRed()
'   Toggle the color for selected cells
    If TypeName(Selection) = "Range" Then
        Dim r As Range
        For Each r In Selection
            If r.Interior.Color = RGB(255, 255, 255) Then '//<~~ NOTE the RGB value
                r.Interior.Color = RGB(255, 0, 0)
            Else
                r.Interior.Color = RGB(255, 255, 255)
            End If
        Next r
    End If
End Sub