Word VBA:转换 Footers/Headers 中的上标
Word VBA: Convert Superscripts in Footers/Headers
我正在使用这样的代码将每个部分的所有 headers/footers 输出到一个文本文件:
我已经能够使用 Replace() 毫无问题地转换 sHeader/sFooter 字符串变量中的所有特殊字符。
示例:sFooter = Replace(sFooter, ChrW(8804), "^R'\ {\uc2\u8804 <=}'")
一切都很好,直到我尝试替换上标。 Alt+x 只给我字母本身的值。我试过查找十六进制值(甚至可能不是东西)但没有成功。我什至尝试了不同的拉丁字符值。
我录制了一个宏,看看Word如何替换它,得到:
Selection.Find.ClearFormatting
With Selection.Find.Font
.Superscript = True
.Subscript = False
End With
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "A"
.Replacement.Text = "^super{a}"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
问题是我不知道如何一起使用它们。
我尝试使用 oSec.Footers(wdHeaderFooterFirstPage).Range.Find...
而不是 Selection.Find...
但这会导致空字符串。
我能否从 sHeader/sFooter 以某种方式创建一个 String 对象,以便我可以使用录制的宏代码?我尝试谷歌搜索,将字符串转换为对象,但没有得到任何帮助。有没有更好的方法?
提前致谢。
我知道这并不能完全回答你的问题,但问题是无论是否为上标,字符都是相同的,即上标是格式化,就像粗体或斜体一样。
例如粗体A、普通A、上标A的代码都是65。
如果要保存到文本文件,则无法保存格式,因此您需要为上标字符创建自己的表示法。
来自 Find/Replace 代码的表示,即“^super{a}”是 Word 用来允许您对具有特定格式的文本执行 Find/Replace 的内容。
注意:有一些特殊字符,例如²,有一个单独的字符代码为2,所以这些字符会有不同的代码。
感谢 M1chael 的意见。
通过将选择设置为当前 header/footer 部分,我能够使上面录制的宏起作用。
示例:
oSec.Footers(wdHeaderFooterPrimary).Range.Select
Selection = ActiveDocument.ActiveWindow.Selection
谢谢
我正在使用这样的代码将每个部分的所有 headers/footers 输出到一个文本文件:
我已经能够使用 Replace() 毫无问题地转换 sHeader/sFooter 字符串变量中的所有特殊字符。
示例:sFooter = Replace(sFooter, ChrW(8804), "^R'\ {\uc2\u8804 <=}'")
一切都很好,直到我尝试替换上标。 Alt+x 只给我字母本身的值。我试过查找十六进制值(甚至可能不是东西)但没有成功。我什至尝试了不同的拉丁字符值。
我录制了一个宏,看看Word如何替换它,得到:
Selection.Find.ClearFormatting
With Selection.Find.Font
.Superscript = True
.Subscript = False
End With
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "A"
.Replacement.Text = "^super{a}"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
问题是我不知道如何一起使用它们。
我尝试使用 oSec.Footers(wdHeaderFooterFirstPage).Range.Find...
而不是 Selection.Find...
但这会导致空字符串。
我能否从 sHeader/sFooter 以某种方式创建一个 String 对象,以便我可以使用录制的宏代码?我尝试谷歌搜索,将字符串转换为对象,但没有得到任何帮助。有没有更好的方法?
提前致谢。
我知道这并不能完全回答你的问题,但问题是无论是否为上标,字符都是相同的,即上标是格式化,就像粗体或斜体一样。
例如粗体A、普通A、上标A的代码都是65。
如果要保存到文本文件,则无法保存格式,因此您需要为上标字符创建自己的表示法。
来自 Find/Replace 代码的表示,即“^super{a}”是 Word 用来允许您对具有特定格式的文本执行 Find/Replace 的内容。
注意:有一些特殊字符,例如²,有一个单独的字符代码为2,所以这些字符会有不同的代码。
感谢 M1chael 的意见。
通过将选择设置为当前 header/footer 部分,我能够使上面录制的宏起作用。
示例:
oSec.Footers(wdHeaderFooterPrimary).Range.Select
Selection = ActiveDocument.ActiveWindow.Selection
谢谢