我需要格式化第一行多行文本单元格的颜色(或粗体文本...)。所以例如我得到了
= 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
但是如果有可能的话,我找不到如何在函数内部执行此操作的方法。
答案 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