在VBA中的指令不适用于公式单元格

时间:2020-01-26 18:43:08

标签: excel vba instr

我有一个单元格(示例L22),该单元格具有一个公式(引用另一张图纸(Sheet!1A22),并返回价值出售110(108%)。我只想更改文本颜色(108%) (而不是整个单元格的值)。我的方法是使用Instr查找“(”并找到直到“)的长度并为其上色。这是我使用的代码。

Sub colr()
Dim StartChar As Integer, LenColor As Integer
    With Flash.Range("L22")
        StartChar = InStr(1, .Value, "(")
        If StartChar <> 0 Then
            LenColor = Len(.Value) - StartChar + 1
            .Characters(Start:=StartChar, Length:=LenColor).Font.Color = RGB(255, 0, 0)
        End If

    End With
End Sub

,但是代码不执行任何操作。但是,如果我将公式替换为值,就可以正常工作。

2 个答案:

答案 0 :(得分:0)

正如其他人所评论的那样,不可能在公式的结果中操作Characters,至少据我所知。

最明显的选择是在两个相邻的单元格中写入值和百分比,然后在后者上使用条件格式。

但是,如果您坚持使用自己的格式,那么您将不得不解决公式问题。更改任何参考范围值时,基本上都会触发公式计算。您可以自己捕获该事件,例如在Worksheet_Change处理程序中说,然后将算法结果写入Sheet2。这将使您能够为结果的字符着色。

骨架代码如下所示(在Sheet1对象中):

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim cell As Range
    Dim result As Variant
    Dim pt As Long

    For Each cell In Target.Cells
        'Test for a change in the desired range.
        If Not Intersect(cell, Me.Range("A:A")) Is Nothing Then
            'Check that your cell value matches the conditions you want, eg
            If IsNumeric(cell.Value) Then
                'Calculate the result - as per your cell formula.
                result = cell.Value * 2 & " (" & cell.Value * 2 / 100 & "%)"
                'Write and colour the result.
                pt = InStr(result, "(")
                With Sheet2.Cells(cell.Row, "L")
                    .Value = result
                    .Characters(pt, Len(result)).Font.Color = RGB(255, 0, 0)
                End With
            End If
        End If
    Next
End Sub

答案 1 :(得分:0)

当您使用值时,它将为您提供实际的数字,但使用文本时,它将在单元格中显示。因此您可以更改:

StartChar = InStr(1, .Value, "(")

成为:

StartChar = InStr(1, .text, "(")
相关问题