【问题标题】:Style to a variable in VBAVBA中的变量样式
【发布时间】:2021-04-15 17:37:59
【问题描述】:

所以我有这个代码,它将文本中的每个 X 替换为“Asunto (1,2,..): Expediente N°”。我尝试设置这部分代码的样式: 我想要的是在 Arial 11 Bold 中替换 X 的文本

.Text = "Asunto" & " " & i & " " & "Expediente N°"

我试过了,但样式适用于整个文档,而不仅仅是那个文本,我不知道还能尝试什么

     Sub Macro1()
'
' Macro1 Macro
'
'
Application.ScreenUpdating = False
Dim i As Long
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "X"
    .Replacement.Text = ""
    .Format = False
    .Forward = True
    .Wrap = wdFindStop
    .MatchWildcards = True
    .Execute
  End With
  Do While .Find.Found
    i = i + 1
    .Text = "Asunto" & " " & i & " " & "Expediente N°"
    .Find.Execute
    .Collapse wdCollapseEnd
    .Find.Execute
  Loop
  With .Font
  .Bold = True
  .Name = "Arial"
  .Size = 11
End With
Application.ScreenUpdating = True
MsgBox i & " Coincidencias."
End With
End Sub

【问题讨论】:

  • 我看到您在哪里搜索值 X 并将其替换为另一个值。我看不到您尝试在哪里设置文本样式。你想应用什么风格?
  • 我编辑了代码,这样你就可以看到我做了什么,我尝试了这样的样式,但它不仅适用于我想要替换的文本,而且适用于整个文本。我已经解决了快捷方式问题,现在我只需要在 Do while 下设置文本样式
  • With .Font 块需要在Do While 循环内,紧跟在.Text = 之后

标签: vba events ms-word shortcut


【解决方案1】:

您没有应用样式 - 您所做的只是用硬格式覆盖已经存在的任何样式。做一个样式,例如:

Sub Demo()
Application.ScreenUpdating = False
Dim i As Long
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "X"
    .Replacement.Text = ""
    .Format = False
    .Forward = True
    .Wrap = wdFindStop
    .MatchWildcards = True
  End With
  Do While .Find.Execute
    i = i + 1
    .Text = "Asunto" & " " & i & " " & "Expediente N°"
    .Style = wdStyleStrong
    .Collapse wdCollapseEnd
  Loop
End With
Application.ScreenUpdating = True
MsgBox i & " instances found."
End Sub

在上面,我通过常量 wdStyleStrong 使用了 Word 的“强”样式。如果您的文本已经是 11pt Arial,这就是您所需要的。否则,您应该定义一个合适的 11pt Arial Bold 字符样式并应用它。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-10-05
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多