【发布时间】:2016-10-28 06:41:08
【问题描述】:
我编写了一个简单的 Excel VBA 宏,以便在单个单元格中具有不同的格式。我有一个返回 4 个可能值之一的公式:
- l1
- l2
- l3
- l4
我希望将其格式化为第一个字符的 Wingdings,其颜色基于数字 - 1 = 红色、2 = 橙色、3 = 黄色和 4 = 绿色。
我所做的是在单元格更改时放置一个事件触发器:
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
结束子
我的问题是,如果我手动输入例如 l4,代码会完美运行。但是,一旦我使用公式确定了这个值,它就会按我的意愿停止工作。我最终得到了这个:
任何人都可以提出一个解决方案,让我可以根据需要格式化公式的结果吗?
【问题讨论】:
-
这可能与公式单元格的格式有关。手动尝试一些比较。例如 =Right(Formulacell1;1)=1 检查匹配项是否真的存在,或者例如您的公式单元格使用了不同的格式,因此找不到匹配项。
-
您可以将公式强制转换为第一行之前的值,例如
rCll.value = rCll.value或使用cells.copy-.Cells.PasteSpecial xlPasteValues的多种方法之一 -
看起来这不是因为公式,而是如果您将公式拖动到自动填充。宏似乎只触发一次。如果您将其添加到范围内每个单元格的循环中,您可能会得到您想要的
标签: excel formatting vba