我希望有一个表单控件按钮,使用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
循环具有相同的结果。有什么想法吗?
答案 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