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