Excel内置或VBA函数,用于格式化部分文本(例如颜色)

Excel内置或VBA函数,用于格式化部分文本(例如颜色),excel,function,vba,string-formatting,Excel,Function,Vba,String Formatting,我需要格式化多行文本单元格第一行的颜色(或粗体文本…)。所以我得到了 =myfunction(第一行,第二行),然后生成(在一个单元格内) 但我需要它来生产 **firstLine** (vbLf) secondLine (第一行粗体) 因此,仅格式化字符串的一部分,但在VBA函数中。我可以在潜艇里面用类似的东西 lngPos = InStr(myCell.Value, vbLf) With myCell.Characters(Start:=1, Length:

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

=myfunction(第一行,第二行),然后生成(在一个单元格内)

但我需要它来生产

    **firstLine** (vbLf)
    secondLine
(第一行粗体) 因此,仅格式化字符串的一部分,但在VBA函数中。我可以在潜艇里面用类似的东西

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

但如果可能的话,我找不到一种方法如何在函数内部实现它

除了从用户定义函数(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

如果希望通过代码触发更新,而不是等待直接更改(并且格式化单元格不会触发
更改
事件),则可以通过简单的子命令强制更新

使用
更改
事件时,应始终禁用
事件
,以避免意外循环。虽然格式化不会触发事件本身,但进一步的代码更改/添加可以做到这一点——这是减少这种风险的良好实践

普通模块

Sub MakeUpdate()
Sheets(1).[a1:a10].Formula = Sheets(1).[a1:a10].Formula
End Sub
在活页(1)的活页代码中

Sub MakeUpdate()
Sheets(1).[a1:a10].Formula = Sheets(1).[a1:a10].Formula
End Sub
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