从.Interior.ColorIndex转换为颜色名称-VBA

时间:2019-06-25 12:14:35

标签: excel vba

是否可以使用VBA将.Interior.ColorIndex转换为颜色名称? 下面得到的只是获取颜色索引。我没有找到将其转换为颜色名称的方法。

代码:

Option Explicit

Sub test()

    Dim Color As Variant

    With ThisWorkbook.Worksheets("Sheet1").Range("A1")
        Color = .Interior.ColorIndex
    End With

End Sub

1 个答案:

答案 0 :(得分:1)

这是VBA的常见要求。在其他语言中,此“获取枚举的名称”活动由称为反射的服务提供。不幸的是,VBA不能提供开箱即用的反射,因此在VBA中,对于许多事情,我们必须设置样板类来为我们完成工作。将下面的代码作为名为“ ColoursEnum”的类粘贴到VBA中

该类还是单实例类的一个示例,在该实例中,我们有意覆盖了VBA默认值,并允许为我们声明该类的单个实例(即,我们不必执行“ New ColoursEnum”

此枚举可对枚举的迭代进行可靠的处理。如果long值的范围不连续,则使用普通的VBA枚举可能会遇到不存在的枚举数的问题。对于ColoursEnum,我们将Items作为变体数组获得,因此可以在数组上进行迭代,而不必担心它们是不连续的范围。

该类还通过允许文本显示是否存在键或值来扩展Scripting.dictionary中的“存在”的概念。不必将NOT放在Exists的前面,这样可以使代码更具可读性(例如,“ LacksKey(key)”而不是“ Not Exists(key)”

将这个答案汇总在一起,我深深感谢RubberDuck团队撰写的出色的VBA文章。

尽管默认情况下为我们创建了该类,但我们仍然需要初始化它使用的字典,所以我们必须这样做

<li><a href="#" onclick="shareOnFacebook(1)" ><i class="fa fa-facebook"></i></a></li>

在实际使用字典之前。

此外,因为我们有一个Class而不是一个模块,所以我们可以设置一个引用

ColoursEnum.Setup

================================================ ==========

set my_colours = ColoursEnum
.....
if my_colours.LacksItem("Red") then etc....