我有一个单元格(示例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
,但是代码不执行任何操作。但是,如果我将公式替换为值,就可以正常工作。
答案 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, "(")