string - 您可以使用什么 VBA 字符串对象来修改段落
问题描述
我正在寻找一个可以在 Excel VBA 中声明的字符串对象,我可以操纵段落样式。我知道您可以使用 Range 对象执行此操作,但是我实际上是在以编程方式构建富文本字符串,然后将该文本分配给函数的结果。
看这里。
Function makestring(char As String) As String
Dim myString As String
myString = "hello world" & char
myString = myString & "this is the second line"
myString.Characters(1.11).Font.color = Red ' this line is not valid
makestring = myString
End Function
解决方案
您不能按照您在伪代码中建议的方式为字符串分配字体颜色。执行此操作的正确方法是在将字符串插入文档时将字体颜色分配给范围对象。
以下伪代码行向我建议,您只希望字符串的一部分具有某种颜色:
myString.Characters(1.11).Font.color = Red ' this line is not valid
例如,在单元格 A1 中插入字符串“Red and blue”。以下代码会将单元格 A1 中字符串中的子字符串“Red”的字体颜色更改为红色:
With Range("A1").Characters(Start:=1, Length:=3).Font
.Color = RGB(255, 0, 0) 'red
End With
插入函数返回的字符串时,只需通过回车将其拆分,然后分配适当的字体颜色。以下子例程将要插入字符串的范围和字符串本身作为参数,然后在每行文本的红色和黑色字体颜色之间交替:
Sub ChangeLineFontColors(myString As String, rng As Range)
Dim i As Integer, j As Integer, sLen As Integer
Dim vItem As Variant
If rng Is Nothing Then Exit Sub
If myString <> vbNullString Then
Application.ScreenUpdating = False
rng.Value = myString
If InStr(1, myString, Chr(10)) > 0 Then
vItem = Split(myString, Chr(10)) ' change delimiter to Chr(13) or 'vbNewline', if required
j = 1
For i = LBound(vItem) To UBound(vItem)
sLen = Len(vItem(i))
With rng.Characters(Start:=j, Length:=sLen).Font
If i Mod 2 = 0 Then
.Color = RGB(255, 0, 0) 'red
Else
.Color = RGB(0, 0, 0) 'black
End If
j = j + sLen + 1
End With
Next i
End If
Application.ScreenUpdating = True
End If
End Sub
推荐阅读
- javascript - 我想在文本上显示图像。假设当我将光标放在文本上然后需要显示图像
- typescript - TypeScript:隐式泛型值类型?
- android - Camera2 API:在请求提交后 4-5 秒拍照
- ios - Firebase crashlytics 未报告崩溃
- c++ - 如何在 MSBuild 中自动生成两阶段代码?
- python - 如何对应用程序进行并行调用?
- dart - 比较两个字符串列表并检查它们是否至少有一个相同的字符串
- azure - Azure 数据工厂将参数传递给函数(字符串替换)
- db2 - 恢复数据库并非所有行都恢复
- php - 注册新表格时,我的数据库不更新数据