不同工作簿上的Excel intracell格式宏的不同结果

时间:2016-10-27 08:05:54

标签: excel excel-vba formatting vba

我编写了一个简单的Excel VBA宏,在单个单元格中有不同的格式。我有一个公式,它返回4个可能的值之一:

  1. L1
  2. L2
  3. L3
  4. L4
  5. 我希望格式化为第一个字符的Wingdings,颜色基于数字 - 1 =红色,2 =橙色,3 =黄色,4 =绿色。
    Excel formatting image

    我所做的是在细胞更换上加入事件触发器:

    Private Sub Worksheet_Change(ByVal Target As Range) Call Wingdings(Target) End Sub

    子程序如下:

    Sub Wingdings(rCll As Range)
    
    If rCll.Value = "l1" Or rCll.Value = "l2" Or _
        rCll.Value = "l3" Or rCll.Value = "l4" Then
        Select Case Right(rCll.Value, 1)
    
        Case 1 'Red
            With rCll.Characters(Start:=1, Length:=1).Font
                .Name = "Wingdings"
                .Color = RGB(255, 0, 0)
            End With
        Case 2 'Orange
            With rCll.Characters(Start:=1, Length:=1).Font
                .Name = "Wingdings"
                .Color = RGB(255, 153, 0)
            End With
    
        Case 3 'Yellow
            With rCll.Characters(Start:=1, Length:=1).Font
                .Name = "Wingdings"
                .Color = RGB(255, 255, 0)
            End With
        Case 4 'Green
            With rCll.Characters(Start:=1, Length:=1).Font
                .Name = "Wingdings"
                .Color = RGB(0, 255, 0)
            End With
        End Select
    End If 
    

    End Sub

    我的问题是,如果我手动输入例如l4,代码运行完美。但是一旦我使用公式确定这个值,它就会按照我的意愿停止工作。我最终得到了这个: What I get with a formula

    有人可以建议一个解决方案,让我按照我的意愿格式化公式的结果吗?

1 个答案:

答案 0 :(得分:0)

你的工作。

如果你要拖动公式

,也许有条件地在Change事件上调用类似的东西
Sub fixstuff()
    For Each cell In Selection
     cell.Select
     Call Wingdings(Range(cell.Address))
    Next cell
   End Sub