当前位置: 首页 > 知识库问答 >
问题:

调整同一段落不同部分的字体-Excel VBA

沈长恨
2023-03-14

我正在通过VBA将数据从Excel输入到Word文档中。我想像下面这样格式化。

1.服务票号452345:Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incidunt ut labore et dolore magna aliqua。

服务票部分用粗体和斜体显示,描述仅用斜体显示。服务票号和描述来自Excel中的不同单元格。

这是我的代码:

'' Bookmark where I will be inserting the data.
wdApp.Selection.GoTo what:=-1, Name:="Service_Ticket_Comments"

Dim i As Integer
Dim serviceTicket As String

For i = 4 To shAuditTrail.Range("A4").End(xlDown).Row


    '' Pulling comments from the comments column.
    If Not IsEmpty(Cells(i, 11)) Then

          serviceTicket = "Service Ticket #" & Cells(i, 1)

          wdApp.Selection.TypeText "Service Ticket #" & Cells(i, 1)
          wdApp.Selection.Font.Bold = True
          wdApp.Selection.Font.Italic = True


          wdApp.Selection.TypeText " - " & Cells(i, 11) & Chr(10) & Chr(10)
          wdApp.Selection.Font.Italic = True
    End If

Next

这使得服务票证部分和描述变得粗体化,因为selection应用于整块。我如何只保留第一部分的粗体和斜体,而其他部分只是粗体?

共有2个答案

郎增
2023-03-14

可以使用“范围字符”属性设置单元格中特定字符的格式。(参见https://msdn.microsoft.com/en-us/library/office/ff198232.aspx)例如,下面的例程将在范围内每个单元格的搜索字符串之前(包括搜索字符串)的所有文本用斜体字表示,并用粗体表示。在这种情况下,要查找的字符串也作为参数传递。

Sub TestMacro()
   Call BoldItalicsPartofCell(Selection, ":")
End Sub


Sub BoldItalicsPartofCell(rng As Range, searchstr)
   Dim singlecell As Range     'Loop counter
   Dim beforecolon As Integer  'Starting position of search string

   For Each singlecell In rng
      beforecolon = InStr(singlecell, searchstr) - 1 + Len(searchstr)
      If beforecolon > 0 Then
         With singlecell.Characters(Start:=1, Length:=beforecolon).Font
            .FontStyle = "Bold Italic"
            '.Underline = True  'If you want udnerlined as well!
         End With
      End If
   Next
End Sub
公冶嘉茂
2023-03-14

不要使用选择,而是使用范围,与Excel中的操作相同。

不清楚目标Word文档中的选择来自哪里,所以我没有选择使用它作为起点。但通常情况下,只有当用户选择了目标时,您才会使用此技术...

Dim rng as Word.Range
Set rng = wdApp.Selection.Range
rng.Text = serviceTicket
rng.Font.Bold = True
rng.Font.Italic = True
rng.Collapse wdCollapseEnd
rng.Text = Cells(i,11) & vbCr
rng.Font.Bold = False
rng.Font.Italic = True

注意:您实际上应该为此格式创建/使用字符样式,而不是直接应用该格式。这将产生更有效的代码和更易管理的文档。

 类似资料:
  • 有没有一种方法可以将粗体样式应用于段落开头,直到一个分隔符(如冒号或连字符)?分隔符前的值可以是任意长度。 这样的字符串: 定义项目:项目的描述或定义...... 看起来像: 定义项目:项目的描述或定义......

  • 问题内容: 我有一个包含不同部分的网页,需要将不同的CSS样式表应用于每个部分。我想知道的是如何指定要用于网页每个不同部分的CSS样式表。如果我将它们放在一起,则组件将无法正确显示。 问题答案: 您不能将不同的样式表应用于页面的不同部分。您有几种选择: 最好是使用类名称将页面的不同部分包装在div中: 然后在您的part1 CSS中,为每个CSS规则添加“ .part1”前缀,在您的part2 C

  • 我使用的是来自的fonthttp://fonts.googleapis.com/css?family=Open Sans。由于安全原因,一些客户端使用封闭环境,因此我需要使用从npm安装的本地字体。 我尝试了npm为提供的多个软件包,如,,但使用相同css的字体与以前使用GoogleApis字体呈现的字体不同,尤其是

  • 我是JavaFX新手。我有一个加载了垂直拆分窗格的窗口。在拆分页面的左侧,我有几个按钮。每次单击按钮时,我都需要在拆分窗格的右侧加载单独的fxml。所以在这里我粘贴屏幕截图以保持清晰。 从现在开始,当搜索按钮被点击时,我在不同的阶段,不同的场景中打开。现在我需要在baselayout窗口的右侧加载Searcher。下面是一些加载baseLayout的代码。 下面是一些点击按钮时加载搜索器的代码。

  • 我想使用 上的按钮调整 上的按钮大小。 这是我的代码,它给了我一个错误: 它在 .. 处有一个错误。我把我的公开了,所以可以访问它。但它仍然给我错误“Form2.button8由于其保护级别而无法访问”。 这是我在form2的按钮8 public void button8_Click(object sender, EventArgs e) { } 我该如何解决这个问题?

  • 我有一个POJO,它有一个字段: 当将一个json响应解析到这个资产POJO中时,一切工作都很完美。但是,与此资产附带的关键字有一个细微的区别。它可以是: 或 有没有一种方法来注释POJO来识别这个案例并反序列化到相同的字段中。两者不可能出现在相同的答复中。