执行宏时,如何返回Excel中字符的颜色?

执行宏时,如何返回Excel中字符的颜色?,excel,vba,colors,character,Excel,Vba,Colors,Character,在Excel工作表的Sheet1上,我使用数据验证选项为用户创建下拉选项。例如,用户可能会选择一个带有黄色背景的红十字或生物危害符号(请参见Segoe UI符号)。虽然我对原始数据选项进行了颜色编码,但当用户单击下拉列表时,他们只会看到其中一个选项的黑和白。简单的选择似乎是在将有下拉列表的单元格上使用条件格式。不过,我还创建了一个宏来在Sheet2上重现这些字符。虽然宏会复制角色,但角色不会保留任何原始颜色格式 我在下面提供一些代码来帮助理解我所做的工作。请注意,L1到L5表示形状左起点的规格。

在Excel工作表的Sheet1上,我使用数据验证选项为用户创建下拉选项。例如,用户可能会选择一个带有黄色背景的红十字或生物危害符号(请参见Segoe UI符号)。虽然我对原始数据选项进行了颜色编码,但当用户单击下拉列表时,他们只会看到其中一个选项的黑和白。简单的选择似乎是在将有下拉列表的单元格上使用条件格式。不过,我还创建了一个宏来在Sheet2上重现这些字符。虽然宏会复制角色,但角色不会保留任何原始颜色格式

我在下面提供一些代码来帮助理解我所做的工作。请注意,L1到L5表示形状左起点的规格。Vrb1到Vrb5代表我想要复制的角色

总的想法是,将生成一个流程图。在每个步骤旁边,最多可以生成5个图像(Vrb1到Vrb5)

提前感谢您的帮助

For Each rng In ws1.Range("CS3:CS22")
    L1 = rng.Value
    L2 = rng.Offset(, 1).Value
    L3 = rng.Offset(, 2).Value
    L4 = rng.Offset(, 3).Value
    L5 = rng.Offset(, 4).Value
    Top = rng.Offset(, 5).Value
    Width = rng.Offset(, 6).Value
    Height = rng.Offset(, 7).Value
    Vrb1 = rng.Offset(, -87).Value
    Vrb2 = rng.Offset(, -85).Value
    Vrb3 = rng.Offset(, -83).Value
    Vrb4 = rng.Offset(, -81).Value
    Vrb5 = rng.Offset(, -79).Value



    Select Case rng.Offset(, -87).Value
        Case Is <> 0
            Set shp = ws2.Shapes.AddShape(msoShapeRectangle, L1, Top, Width, Height)
                With shp
                    .TextFrame.Characters.Text = Vrb1
                    .LinkFormat.Locked = False
                    .TextFrame.MarginBottom = 0
                    .TextFrame.MarginLeft = 0
                    .TextFrame.MarginRight = 0
                    .TextFrame.MarginTop = 0
                    .TextFrame.HorizontalAlignment = xlHAlignCenter
                    .TextFrame.VerticalAlignment = xlVAlignCenter
                    .TextFrame.Characters.Font.FontStyle = "Arial"
                    .TextFrame.Characters.Font.Size = 23
                    .ShapeStyle = msoLineStylePreset1
                    .Line.ForeColor.RGB = RGB(255, 255, 255)

                End With

                End Select
ws1.范围(“CS3:CS22”)中每个rng的

L1=额定值
L2=rng.偏移量(,1).值
L3=径向偏移量(,2).值
L4=rng.偏移量(,3).值
L5=径向偏移量(,4).值
顶部=基准偏移量(,5).值
宽度=rng.偏移量(,6).值
高度=rng.偏移量(,7).值
Vrb1=rng.偏移量(,-87).值
Vrb2=rng.偏移量(,-85).值
Vrb3=转速偏移量(,-83).值
Vrb4=净偏差(,-81).值
Vrb5=发动机偏移量(,-79).值
选择案例rng.偏移(,-87).值
案例为0
设置shp=ws2.Shapes.AddShape(msoShapeRectangle,L1,顶部,宽度,高度)
小水电
.TextFrame.Characters.Text=Vrb1
.LinkFormat.Locked=False
.TextFrame.MarginBottom=0
.TextFrame.MarginLeft=0
.TextFrame.MarginRight=0
.TextFrame.MarginTop=0
.TextFrame.HorizontalAlignment=xlHAlignCenter
.TextFrame.VerticalAlignment=xlVAlignCenter
.TextFrame.Characters.Font.FontStyle=“Arial”
.TextFrame.Characters.Font.Size=23
.ShapeStyle=msoLineStylePreset1
.Line.ForeColor.RGB=RGB(255、255、255)
以
结束选择

DV下拉列表不会选择颜色或其他格式。如果你需要的话,你必须使用不同的方法。谢谢你,蒂姆·威廉姆斯!如果您需要从通过条件格式应用颜色的单元格中提取颜色,请查看
DisplayFormat
属性。再次感谢您,Tim!我希望我正在写的代码会不断地改变……我希望它会变得更好。我走了另一条路。例如,在第一页上,用户可能会选择“医疗错误”。在同一张纸上和另一个单元格中,这会转化为一个十字架。我编写的代码使十字显示在文本框中,但我也使用“Select Case”创建了一个条件,即文本框将具有红色背景。当我更新代码时,我会记住你的建议。