当值更改为VBA

时间:2018-06-20 06:49:01

标签: excel vba excel-vba color-palette

代码:

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

当列中的值更改时,此代码可以完美工作并更改颜色。但是颜色是在代码中指定的。我希望用户选择他/她选择的颜色。

我在上面的代码中得到的输出:
enter image description here

我想要代码做什么:
打开调色板。
用户选择一种颜色。
将颜色索引传递给变量。
值更改时,行将交替使用白色和所选颜色进行着色。
例如如果用户从调色板中选择蓝色,则行将为蓝色和白色,并带有备用组。如果用户从调色板中选择绿色,则行将为绿色和白色,并带有备用组。

我尝试包含此代码:

Dim colorIndex As XlColorIndex: colorIndex = Application.Dialogs(xlDialogEditColor).Show(10)
MsgBox colorIndex

调色板完美打开,但是MsgBox colorIndex给我-1作为输出。

我似乎无法使它正常工作。代码有没有变化??

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