我在Excel中编写VBA脚本,将基于某些表的文本输出到Word文档。在大多数情况下,一切都很美妙(我正在自学,因为我从stackoverflow获得了很多帮助)。我有一个相当长的代码,所以在这里复制它将很困难,我将尝试展示相关的部分。
我遇到的问题是在我经历时尝试更改字体的格式。 我已经创建了一些不同的样式来帮助标准化格式化选项,
With wrdDoc
.Styles.Add ("SectionHeader")
.Styles.Add ("NoFormat")
.Styles.Add ("Marginal")
.Styles.Add ("Failed")
.Styles.Add ("Unknown")
.Styles.Add ("Bold")
With .Styles("SectionHeader")
.Font.Name = "Calibri"
.Font.Size = 12
.Font.Underline = True
.Font.Bold = False
.Font.Italic = False
.Font.Strikethrough = False
.Font.Subscript = False
.Font.Superscript = False
.Font.Color = RGB(0, 0, 0)
End With
With .Styles("NoFormat")
.Font.Name = "Calibri"
.Font.Size = 12
.Font.Underline = False
.Font.Bold = False
.Font.Italic = False
.Font.Strikethrough = False
.Font.Subscript = False
.Font.Superscript = False
.Font.Color = RGB(0, 0, 0)
End With
With .Styles("Marginal")
.Font.Name = "Calibri"
.Font.Size = 12
.Font.Underline = False
.Font.Bold = True
.Font.Italic = False
.Font.Strikethrough = False
.Font.Subscript = False
.Font.Superscript = False
.Font.Color = RGB(0, 0, 255)
End With
With .Styles("Failed")
.Font.Name = "Calibri"
.Font.Size = 12
.Font.Underline = True
.Font.Bold = True
.Font.Italic = False
.Font.Strikethrough = False
.Font.Subscript = False
.Font.Superscript = False
.Font.Color = RGB(255, 0, 0)
End With
With .Styles("Unknown")
.Font.Name = "Calibri"
.Font.Size = 12
.Font.Underline = False
.Font.Bold = True
.Font.Italic = False
.Font.Strikethrough = False
.Font.Subscript = False
.Font.Superscript = False
.Font.Color = RGB(0, 176, 80)
End With
With .Styles("Bold")
.Font.Name = "Calibri"
.Font.Size = 12
.Font.Underline = False
.Font.Bold = True
.Font.Italic = False
.Font.Strikethrough = False
.Font.Subscript = False
.Font.Superscript = False
.Font.Color = RGB(0, 0, 0)
End With
End With
然后,我正在尝试这样做,输出文本将在句子更改格式的中间有一个单词,
With wrdApp.Selection
.Style = wrdDoc.Styles("NoFormat")
.TypeText Text:="The start of this sentence is "
.Style = wrdDoc.Styles("Unknown")
.TypeText Text:="unknown"
.Style = wrdDoc.Styles("NoFormat")
.TypeText Text:=" so we will keep trying..."
.TypeParagraph
End With
但我得到的是没有改变的句子,如果该词的格式。
更奇怪的是,我还有一些组件应该将我的“Bold”风格应用于整个句子,其中一个适用于Bold,另一个不应用,
With wrdApp.Selection
.Style = wrdDoc.Styles("Bold")
.TypeText Text:="This one doesn't work"
End With
With wrdApp.Selection
.Style = wrdDoc.Styles("Bold")
.TypeText Text:="this one works!"
.TypeParagraph
End With
我也希望能够申请
.ParagraphFormat.SpaceAfter = 0
.ParagraphFormat.SpaceBefore = 0
这些选择中的一些,但我无法弄清楚如何做到这一点。我可以让它为文档的“范围”做到这一点,但最终将它应用于文档的现有部分,而不是任何新文本。
答案 0 :(得分:1)
你遇到的一个问题是,当你创建一个Style时,默认它是一个Paragraph样式(或者在Word的最新版本中,它通常是一个“链接样式”,有时被认为是段落/字符样式)。
所以当你执行
时.Style = wrdDoc.Styles("NoFormat")
第二次,例如,样式应用于整个段落。您试图将“未知”应用于段落的一部分这一事实被遗忘了。
如果您创建与字符样式相同的测试样式,例如
.Styles.Add "NoFormat", wdStyleType.wdStyleTypeCharacter
,类似于“未知”风格
再次运行你的第一个测试例,你应该看到差异。
答案 1 :(得分:0)
我总是对Word中的回合范围感到有点困惑,但尝试这样的事情:
Sub TestAdd()
AddWithStyle "This is a normal ", "Normal"
AddWithStyle "but this is different", "Heading 1"
AddWithStyle " and this is back to normal ", "Normal"
End Sub
Sub AddWithStyle(sText As String, sStyle As String)
Selection.TypeText sText
Selection.MoveLeft unit:=wdCharacter, Count:=Len(sText), Extend:=wdExtend
Selection.Style = ActiveDocument.Styles(sStyle)
Selection.Collapse Direction:=wdCollapseEnd
End Sub