vba - 使用命令按钮更改单元格颜色(VBA Excel)

标签 vba excel macros userform

我目前有一个用户表单,其中加载了三个命令按钮(主要、次要和第三)。这里的想法是用户将使用这三个按钮选择自己的配色方案。

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

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

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

最佳答案

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

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

关于vba - 使用命令按钮更改单元格颜色(VBA Excel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39248907/

相关文章:

c++ - 带重载的宏扩展

arrays - 修改现有函数以处理不同维度/结构的数组

excel - 将重复数字 X 次并增加计数器的公式

java - 从 Rest 服务接收 excel 文件作为 JavaScript 响应

python - 使用 pandas 将数据框写入 Excel 是不正确的

macros - 使用宏绑定(bind) getter 和 setter

c - 为什么我们不能使用预处理器来创建自定义分隔的字符串?

vba - OpenArgs 是 Null 问题

c++ - MS Word InsertBreak 抛出异常

excel - 捕获用户错误并在错误后重新启用 application.events