4

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

=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

但如果可能的话,我无法找到如何在函数中执行此操作的方法。

4

2 回答 2

2

除了从用户定义的函数(UDF)返回一个值之外,它什么也做不了。但是,您可以通过更改触发工作表事件,然后更新数据。将此添加到相关工作表的模块中。将 Range("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
于 2012-12-06T22:49:09.587 回答
0

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

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
于 2012-12-07T00:37:28.647 回答