VBA 将 msoThemeColor 存储在变量中

标签 vba excel charts

我希望将 mso 主题颜色存储在变量中,以便图表颜色和图案可以动态更改(在这种情况下为变量 Th)。这是我当前的代码:

Dim Th As Long
Th = "msoThemeColorAccent" & ActiveCell.Offset(-5, 0)
If ActiveCell = "Realized" Then
    ActiveChart.SeriesCollection(Srs).Select

    With Selection.Format.Fill
        .ForeColor.ObjectThemeColor = Th
        .Solid
    End With
    With Selection.Format.Line
       .ForeColor.ObjectThemeColor = Th
    End With
End If

我认为这里的问题是我没有使用正确的 Dim 分类。我在这里看到了有关将 RGB 存储为变量的问题(使用 Dim Long 似乎是解决方案),但 msoThemeColors 上还没有任何问题。谢谢,如果我可以提供任何其他详细信息,请告诉我!

最佳答案

很难判断发生了什么,因为您的代码严重依赖默认成员。无论如何:

Dim Th As Long

这是正确的。

Dim themeColorIndex As MsoThemeColorIndex

这是正确的明确的(请参阅 MSDN 上的 MsoThemeColorIndex)。

Scott Holtzman said ,这里可能的值是 Enum 值,而不是字符串:您根本无法通过将字符串连接到定义的 Enum 名称之一来生成正确的值。

所以通过这样做:

Th = "msoThemeColorAccent" & ActiveCell.Offset(-5, 0)

我的猜测是,ActiveCell.Offset(-5, 0) 必须包含 1 到 6 之间的数字。这是一个危险的假设:ActiveCell 可能是字面意思任何东西。如果该值位于特定单元格中,请通过其地址引用它:

themeColorIndex = Sheet1.Range("B12").Value

稍微好一些,但它仍然假设B12中的值可以隐式转换为Long整数。

Dim selectedValue As Variant
selectedValue = Sheet1.Range("B12").Value
If Not IsNumeric(selectedValue) Then 
    MsgBox "Invalid value!"
    Exit Sub
End If

If Sheet1.Range("E12").Value <> "Realized" Then Exit Sub

Dim themeColorIndex As MsoThemeColorIndex
themeColorIndex = selectedValue

如果您只对 msoThemeColorAccent1msoThemeColorAccent6 感兴趣,那么您需要 B12 包含值 5 code> 到 10,它们是您要查找的底层枚举值

如果出于可用性原因,您的工作表必须允许值 16,那么您可以执行以下操作:

Dim themeColorIndex As MsoThemeColorIndex
'msoThemeColorAccent1 underlying value is 5, so we add 4 to the value:
themeColorIndex = selectedValue + 4

那么您就做出了另一个危险的假设:您假设有一个事件图表!假设图表存在于 Sheet1 中,您最好再次明确地引用它:

Dim theChart As ChartObject
Set theChart = Sheet1.ChartObjects(1)
With theChart.SeriesCollection(srs) 'whatever srs means
    With .Format
        .Fill.ForeColor.ObjectThemeColor = themeColorIndex
        .Fill.Solid
        .Line.ForeColor.ObjectThemeColor = themeColorIndex
    End With
End With

关于VBA 将 msoThemeColor 存储在变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38130741/

相关文章:

vba - 用户窗体标签外部字体(woff2 文件)

java - 通过内容获取单元格

javascript - 带有百分比坐标的响应轴

javascript - dc.js:向饼图添加图例

excel - VBA VLookUp-不起作用,但没有错误

vba - Excel年周组合计算

excel - 如何在Excel VBA中获取给定模块名称的函数和子列表

linux - 使用 Gnuplot 在组中显示 Y 标签

vba - 在 VLOOKUP 中将 N/A 或 0 替换为空白

vba - Excel VBA - 将逗号分隔的句子从电子邮件复制到单独的 Excel 单元格