vba - 粗体和下划线只是字符串的一部分
问题描述
所以......我有这个表单,人们从列表框中选择不同的控件(我们称之为安全措施控件,这些不是内容控件)并将它们添加到列表中。这是在重复表中。每个控件都有一个标题标签(“工程”“管理”或“PPE”,我想加粗并加下划线,但我希望列表框中选择的选项采用正常格式。打印到的代码部分文档如下所示:
Set tableSequence = ActiveDocument.Tables(1)
Set NewRow = tableSequence.Rows.Add
NewRow.Cells(5).Range.Text = "Engineering: " & MyString3 _
& vbCrLf & "Administrative: " _
& MyString4 & vbCrLf _
& "PPE: " & MyString5
我希望 Engineering、Administrative 和 PPE 加粗并加下划线,并且 MyString 对象表示的项目以标准格式显示。谢谢你。
字符串部分如下:
Private Sub CommandButton6_Click()
Dim tableSequence As Table
Dim NewRow As Row
Dim MyString5 As String
Dim v As Variant
Dim var3
Dim p As String
Dim M As Long
For var3 = 0 To ListBox7.ListCount - 1
If ListBox7.Selected(var3) = True Then
MyString5 = MyString5 & ListBox7.List(var3)
v = Split(MyString5, ",")
p = ""
For M = LBound(v) To UBound(v)
p = p + v(M)
If M Mod 3 = 2 Then
p = p + vbCr
Else
p = p + ","
End If
Next M
p = Left(p, Len(p) - 1)
Debug.Print p
End If
很抱歉把它漏掉了
解决方案
如何格式化 Word 表格中单元格值的一部分(或多个部分):
我不得不承认我不是很喜欢 Word VBA,但我为你把这个 Sub 拼接在一起,它在我的测试文档中工作。根据您的需要进行调整。
Option Explicit
Sub asd()
Dim tableSequence As Table
Set tableSequence = ActiveDocument.Tables(1)
Dim NewRow As Row
Set NewRow = tableSequence.Rows.Add
NewRow.Cells(5).Range.Text = "Engineering: asd" & vbCrLf & "Administrative: vvv" & vbCrLf & "test" & vbCrLf & "PPE: blabla"
NewRow.Cells(5).Range.Bold = False
NewRow.Cells(5).Range.Underline = False
Dim keywordArr As Variant
keywordArr = Array("Engineering:", "Administrative:", "PPE:")
Dim keyword As Variant
Dim myRange As Variant
Dim startPos As Integer
Dim endPos As Integer
Dim length As Integer
Dim i As Integer
i = 1
For Each keyword In keywordArr
Do While InStr(1, myRange, keyword) = 0
Set myRange = NewRow.Cells(5).Range.Paragraphs(i).Range
i = i + 1
Loop
startPos = InStr(1, myRange, keyword)
startPos = myRange.Characters(startPos).Start
length = Len(keyword)
endPos = startPos + length
Set myRange = ActiveDocument.Range(startPos, endPos)
With myRange.Font
.Bold = True
.Underline = True
End With
Next keyword
End Sub
以下是 Excel 中相同内容的解决方案:
首先,您必须像以前一样将文本写入单元格。
接下来是查找关键字在单元格值中的位置+关键字的长度,如下所示
startPos = Instr(1, NewRow.Cells(5), "Engineering:")
length = len("Engineering:")
然后你可以通过设置找到的子字符串的字体Range.Characters.Font
NewRow.Cells(5).Characters(startPos, Length).Font.Bold = True
NewRow.Cells(5).Characters(startPos, Length).Font.Underline = True
现在优雅的方法是拥有一组关键字并遍历它们以更改所有关键字的字体
Dim keywordArr As Variant
keywordArr = Array("Engineering:", "Administrative:", "PPE:")
Dim keyword As Variant
Dim startPos as Integer
Dim length as Integer
For Each keyword In keywordArr
startPos = InStr(1, NewRow.Cells(5), keyword)
length = Len(keyword)
With NewRow.Cells(5).Characters(startPos, Length).Font
.Bold = True
.Underline = True
End With
Next keyword
推荐阅读
- javascript - 如何检查 javascript watch 是否正在运行?
- angular - ngbTypeahead - 传递参数
- python - 在 python 中使用 sqlite3 时出错
- encryption - 如何使用 PGP 非对称加密进行身份验证?
- angular - 使用angular4在html中显示数据
- python - 当我用 pytorch 加载 resnet50.pth 的 state_dict 时出了什么问题
- javascript - 为什么我的 URL 字符串没有按预期缩短?
- python-3.x - 使用键的 Python 字典
- c++ - 为什么 .h 中定义的私有结构需要 .cpp 文件中返回类型的范围?
- python - python pytest-coverage:测试在测试中实际调用了模块定义