【问题标题】:Different outcome of Excel intracell formatting macro on different workbooksExcel单元格内格式化宏在不同工作簿上的不同结果
【发布时间】:2016-10-28 06:41:08
【问题描述】:

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

  1. l1
  2. l2
  3. l3
  4. 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


【解决方案1】:

你有什么作品。

如果您正在拖动公式,可能会在 Change 事件中调用类似的方法

Sub fixstuff()
    For Each cell In Selection
     cell.Select
     Call Wingdings(Range(cell.Address))
    Next cell
   End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多