【问题标题】:Changing colour of cells using command button (VBA Excel)使用命令按钮(VBA Excel)更改单元格的颜色
【发布时间】:2016-08-31 11:51:28
【问题描述】:

我目前有一个加载了三个命令按钮(初级、二级和三级)的用户窗体。这里的想法是用户将使用这三个按钮选择自己的配色方案。

我的工作簿中有代表每种颜色的单元格,然后是一个宏,它在运行时将所有图表对象设置为这些颜色(使用单元格)。

我已设法初始化用户窗体,以便三个命令按钮的内部颜色由我的工作簿中的三个单元格确定:

Private Sub UserForm_Initialize()

Dim cs As Worksheet
Set cs = Sheets("ColourScheme")

TextBox1.SetFocus '' Shift focus away from primary

Primary.BackColor = cs.Range("B1").Interior.color
Secondary.BackColor = cs.Range("B2").Interior.color
Tertiary.BackColor = cs.Range("B3").Interior.color

End Sub

我现在想要做的是,当单击每个按钮时,调色板会加载,用户使用滚轮或 RGB 图形选择一种颜色,最后是我的工作簿中的单元格和命令按钮的内部颜色根据用户的选择进行更改。

我不知道这是否可以做到,但到目前为止,我尝试加载调色板的任何事情都没有运气:

Private Sub Primary_Click()

Application.Dialogs.Item(xlDialogColorPalette).Show

End Sub

【问题讨论】:

  • 对不起@ShaiRado 我还没有尝试过。在我检查您的解决方案之前,设法制定出我自己的解决方案。不过还是谢谢。

标签: vba excel macros userform


【解决方案1】:

试试我在几个应用程序上使用的函数,它经过略微转换以适合您的原始最小化代码,让我知道它是否适合您...

Private Sub Primary_Click()

Const ColorIndexLast                As Long = 32       'index of last custom color in palette
Dim PickNewColor                    As Double          'color that was picked in the dialogue
Dim myOrgColor                      As Double          'original color of color index 32

'save original palette color,modify Range according to your needs
myOrgColor = Range("A1").Interior.Color

'call the color picker dialogue
If Application.Dialogs(xlDialogEditColor).Show(ColorIndexLast) = True Then

    ' "OK" was pressed, read the new color from the palette
    PickNewColor = ActiveWorkbook.Colors(ColorIndexLast)
    ActiveWorkbook.Colors(ColorIndexLast) = myOrgColor  ' reset palette color to its original value
Else
    ' "Cancel" was pressed, palette wasn't changed >> return old color (or xlNone if no color was passed to the function)
    PickNewColor = myOrgColor
End If

' update Colors in relevant Cell
Range("A1").Interior.Color = PickNewColor

End Sub

【讨论】:

    【解决方案2】:

    这是我得出的解决方案:

    Private Sub Primary_Click()
    
    Dim cs As Worksheet
    Set cs = Sheets("ColourScheme")
    
    Dim newColour As Long
    
    Application.Dialogs(xlDialogEditColor).Show (1)
    
    newColour = ThisWorkbook.Colors(1)
    
    cs.Range("B1").Interior.color = newColour
    
    Primary.BackColor = newColour
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      • 2013-06-04
      • 2017-09-17
      • 2013-03-09
      • 2021-11-04
      • 2018-10-17
      相关资源
      最近更新 更多