Excel内置或VBA功能,以格式化部分文本(例如颜色)

时间:2012-12-06 21:55:54

标签: excel function vba string-formatting

我需要格式化第一行多行文本单元格的颜色(或粗体文本...)。所以例如我得到了

= myfunction(firstLine,secondLine),然后生成(在一个单元格内)

    firstLine (vbLf)
    secondLine

但我需要它来制作

    **firstLine** (vbLf)
    secondLine

(第一行是粗体) 因此只需要在VBA函数内部形成一部分字符串。我可以在Sub中用

之类的东西做
    lngPos = InStr(myCell.Value, vbLf)
    With myCell.Characters(Start:=1, Length:=lngPos - 1).Font
        .FontStyle = "Bold"
    End With

但是如果有可能的话,我找不到如何在函数内部执行此操作的方法。

2 个答案:

答案 0 :(得分:2)

除了从用户定义的函数(UDF)返回值之外,它不可能做任何事情。您可以使用更改触发工作表事件,然后更新数据。将其添加到相关表单的模块中。将范围(“J6:J10”)更改为您需要监控的范围并添加粗体/任何其他代码:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("J6:J10")) Is Nothing Then

        ' do something on the cells

    End If

End Sub

答案 1 :(得分:0)

如果您想通过代码触发更新而不是等待直接更改(并且格式化单元格不会触发Change事件),那么您可以通过简单的子句强制它

使用Events事件时,应始终禁用Change以避免意外循环。虽然格式化不会触发事件本身,但进一步的代码更改/添加可能会这样做 - 这是降低此风险的良好做法

正常模块

Sub MakeUpdate()
Sheets(1).[a1:a10].Formula = Sheets(1).[a1:a10].Formula
End Sub
Sheet(1)的表格代码中的

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng1 As Range
Dim rng2 As Range
Set rng1 = Intersect(Target, [a1:a10])
If rng1 Is Nothing Then Exit Sub
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
For Each rng2 In rng1.Cells
rng2.Characters(1, InStr(rng2.Value, vbLf) - 1).Font.FontStyle = "Bold"
Next
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub