Excel内置或VBAfunction来格式化文本的一部分(如颜色)

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

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

firstLine (vbLf) secondLine 

但我需要它来生产

  **firstLine** (vbLf) secondLine 

(第一行是粗体)所以只是一个string的一部分,但在VBA函数中。 我可以在Sub里面做类似的事情

  lngPos = InStr(myCell.Value, vbLf) With myCell.Characters(Start:=1, Length:=lngPos - 1).Font .FontStyle = "Bold" End With 

但我不能find一个方法如何做到这一点,如果它甚至是可能的。

它不可能做任何事情,而是从用户定义函数(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 

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

使用Change事件时,应始终禁用事件以避免意外的循环。 虽然格式化不会触发事件本身,但进一步的代码更改/添加可以这样做 – 减less这种风险的最佳做法

正常模块

 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