代码:
Public Sub HighLightRows()
Dim i As Integer
i = 2
Dim c As Integer
c = 2 'Color 1
'Dim colorIndex As XlColorIndex: colorIndex = Application.Dialogs(xlDialogEditColor).Show(10)
'MsgBox colorIndex
Do While (Cells(i, 1) <> "")
If (Cells(i, 1) <> Cells(i - 1, 1)) Then 'check for different value in cell A (index=1)
If c = 2 Then
c = 24 'color 2
Else
c = 2 'color 1
End If
End If
Rows(Trim(Str(i)) + ":" + Trim(Str(i))).Interior.colorIndex = c
i = i + 1
Loop
End Sub
当列中的值更改时,此代码可以完美工作并更改颜色。但是颜色是在代码中指定的。我希望用户选择他/她选择的颜色。
我在上面的代码中得到的输出:
我想要代码做什么:
打开调色板。
用户选择一种颜色。
将颜色索引传递给变量。
值更改时,行将交替使用白色和所选颜色进行着色。
例如如果用户从调色板中选择蓝色,则行将为蓝色和白色,并带有备用组。如果用户从调色板中选择绿色,则行将为绿色和白色,并带有备用组。
我尝试包含此代码:
Dim colorIndex As XlColorIndex: colorIndex = Application.Dialogs(xlDialogEditColor).Show(10)
MsgBox colorIndex
调色板完美打开,但是MsgBox colorIndex
给我-1作为输出。
我似乎无法使它正常工作。代码有没有变化??
答案 0 :(得分:1)
如果选择了颜色,则Dialogs(xlDialogEditColor)
返回True = -1
,如果用户按下了取消,则False = 0
返回ActiveWorkbook.Colors(10)
。要获得选定的颜色,请像下面的示例一样使用Option Explicit
Public Sub ColorPaletteDialogBox()
Dim lcolor As Long
If Application.Dialogs(xlDialogEditColor).Show(10) = True Then
'user pressed OK
lcolor = ActiveWorkbook.Colors(10)
ActiveCell.Interior.Color = lcolor
Else
'user pressed Cancel
End If
End Sub
。
Option Explicit
Public Sub HighLightRows()
Dim c As Integer
c = 2 'Color 1
Dim i As Long 'integer is too small for row counting!
i = 2
If Application.Dialogs(xlDialogEditColor).Show(10) = True Then
Do While (Cells(i, 1) <> "")
If (Cells(i, 1) <> Cells(i - 1, 1)) Then 'check for different value in cell A (index=1)
If c = 2 Then
c = 10 'color 2
Else
c = 2 'color 1
End If
End If
Rows(Trim(Str(i)) + ":" + Trim(Str(i))).Interior.colorIndex = c
i = i + 1
Loop
Else
'user pressed Cancel
End If
End Sub
因此,对于您的循环,您可以使用类似...
nativeView