在Excel中选择主题颜色,而不使用RGB值?

4
我收到了一张表格,我正在尝试匹配他们选择的非常深的蓝色。
当我单击Home菜单中“填充图标”旁边的三角形以打开颜色选择器时,我可以看到该颜色位于第三列的蓝色中,是从底部开始的第二个。它被称为“深蓝色,文本2,比原色暗25%”。
我想在VBA中完成这个操作,并使用英语术语以使内容更加清晰易懂。我尝试了各种列出VBA颜色名称的网页,但没有找到。是否有某种方法可以选择此颜色而不使用数字RGB或类似方法?

?selection.interior.color - 它返回一个数字,来自于 RGB 的值,但它不是 RGB - Vityata
我更好奇每个主题颜色是否都有一个名称或索引号。例如,我可以选择“深蓝色,文本2,比例为25%的较暗”。 - Maury Markowitz
是的。每个主题颜色都有一个背景颜色,其范围在0256^3-1之间。 - Vityata
不,我想通过名称选择颜色,类似于.interior.color =“深蓝色,文本2,比例减少25%”。 - Maury Markowitz
selection.interior.colorindex = ThisWorkbook.Styles("40 % - Akzent3").Interior.ColorIndex - Vityata
3个回答

2

请查看此处以查看样式的颜色:

Sub TestMe()

    Dim st As Style
    Dim cnt As Long: cnt = 1

    For Each st In ThisWorkbook.Styles
        Cells(cnt, 1).Interior.ColorIndex = cnt
        Cells(cnt, 2) = cnt
        Cells(cnt, 3) = st.Name
        Cells(cnt, 4) = st.NameLocal
        cnt = cnt + 1
    Next st

End Sub

返回这个:

enter image description here

如果您想为特定的选择使用特定的样式:

selection.interior.colorindex = ThisWorkbook.Styles("40 % - Akzent3").Interior.ColorIndex

1
确实输出了一个漂亮的列表...但是颜色不在其中!也许颜色是与强度分开选择的? - Maury Markowitz
@MauryMarkowitz - 你是指模式吗?类似于 Selection.Interior.ThemeColor = xlThemeColorAccent5 这样的东西? - Vityata
不,这与Theme.ThemeColorScheme.colors(x)有关,但似乎你不能使用在显示中看到的名称来使用GetColorName。 - Maury Markowitz
3
你尝试过录制宏并查看发生了什么吗? - Vityata

2
我认为你需要使用以下属性:

   .ThemeColor = xlThemeColorAccent5 'name of the theme
   .TintAndShade = 0.25 'darkness (1 - no dark; -1 - max dark)

让我看看我能用它做些什么! - Maury Markowitz
我认为关键是GetCustomColor,但我不确定如何将我在选择器中看到的名称映射到索引中的正确名称。似乎没有办法从已经在单元格中的选择中读取名称? - Maury Markowitz
1
尝试录制宏... 如@Vityata所建议。 - Pspl
你说得没错...但是你可以自己编写一个函数来将名称从 Dark-Blue 转换为 xlThemeColorLight2 这样的 xl 名称,嘿嘿!! 如果你发布它,我一定会点赞的... - Pspl
1
@MauryMarkowitz - 这可能是其中一部分的重点。这是一个“主题”,因此它被设计为可交换的。您应该能够通过更改主题但保留颜色索引号来从浅色主题切换到深色主题,或从柔和的粉彩主题切换到明亮的花哨主题。 - John Y
显示剩余3条评论

1
Sub DemoThemecolors()
   Dim rng As Range
   Dim n As Integer, m As Integer
   Dim arrNames
   Dim arrDescriptions
   Dim arrValues
   arrNames = Array("xlThemeColorAccent1", "xlThemeColorAccent2", "xlThemeColorAccent3", "xlThemeColorAccent4", "xlThemeColorAccent5", "xlThemeColorAccent6", _
                    "xlThemeColorDark1", "xlThemeColorDark2", "xlThemeColorFollowedHyperlink", "xlThemeColorHyperlink", "xlThemeColorLight1", "xlThemeColorLight2")
   arrDescriptions = Array("Accent1", "Accent2", "Accent3", "Accent4", "Accent5", "Accent6", "Dark1", "Dark2", "Followed hyperlink", "Hyperlink", "Light1", "Light2")
   arrValues = Array(5, 6, 7, 8, 9, 10, 1, 3, 12, 11, 2, 4)

   ActiveWorkbook.Worksheets.Add
   Set rng = Cells(2, 7)
   rng(0, 4).Value = "TintAndShade"
   rng(1, 4).Value = 0
   For m = 1 To 9
      rng(1, m + 4).Value = 0.1 * m
   Next m
   rng(1, 1) = "ThemeColor Name"
   rng(1, 2).Value = "Value"
   rng(1, 3).Value = "Description"

   For n = 1 To 12
      rng(n + 1, 1).Value = arrNames(n)
      rng(n + 1, 2).Value = arrValues(n)
      rng(n + 1, 3).Value = arrDescriptions(n)
      rng(n + 1, 4).Interior.ThemeColor = arrValues(n)
      For m = 1 To 9
         With rng(n + 1, m + 4).Interior
            .ThemeColor = arrValues(n)
            .TintAndShade = 0.1 * m
         End With
      Next m
   Next n
    Range("G1:S2").Font.Bold = True
    Columns("G:I").EntireColumn.AutoFit
End Sub

如果你想知道为什么所有内置主题在Light1/2上显示深色,而在Dark1/2上显示浅色 - 这可能是Excel和Word中的一个“特性”,或者像微软所说的那样;这是一个“功能”。在Powerpoint中则相反-更符合您的预期。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接