首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于自己的分隔符给出MS-Word VBA中的多个超链接

基于自己的分隔符给出MS-Word VBA中的多个超链接
EN

Stack Overflow用户
提问于 2022-06-11 08:29:37
回答 1查看 82关注 0票数 0

我对VBA脚本很陌生。我正在使用TeX转换器将GrindEq文件转换为Word文档。在这个TeX文件中有多个\href命令。这里的内容只出现在MS-Word文件(即. https://doi.org/10.1016/0167-6423(87)90036-0)中。到目前为止,我使用python在内容<LaTeX-href-http>https://doi.org/10.1016/0167-6423(87)90036-0</LaTeX-href-http>的前后放置标记。通过这个内容,在MS-Word文件中生成了带有标记的内容。

类似地,对于转换为小Caps字体,转换为单空间字体,我已经记录了宏和修改根据我自己的需要和使用。

代码语言:javascript
复制
Sub XXX_SmallCaps()
'
' XXX_SmallCaps Macro
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.Replacement.Font
        .SmallCaps = True
        .AllCaps = False
    End With
    With Selection.Find
        .Text = "\<LaTeX-SmallCaps\>(*@)\</LaTeX-SmallCaps\>"
        .Replacement.Text = "\1"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
                
     
        
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    
    '
' XXX_Serif Macro
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Font.Size = 13
    Selection.Find.Replacement.Font.Name = "Calibri"
    
    With Selection.Find
        .Text = "\<LaTeX-SerifFont\>(*@)\</LaTeX-SerifFont\>"
        .Replacement.Text = "\1"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    
'
' XXX_MonoSpace
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Font.Size = 12
    Selection.Find.Replacement.Font.Name = "Courier New"
    
    With Selection.Find
        .Text = "\<LaTeX-MonospaceFont\>(*@)\</LaTeX-MonospaceFont\>"
        .Replacement.Text = "\1"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    
End Sub

但是如何为<LaTeX-href-http>...</LaTeX-href-http><LaTeX-href-http>之间的内容提供超链接,使用VBA中需要删除的</LaTeX-href-http>标记呢?请参考我的DOC文件的图像。

EN

回答 1

Stack Overflow用户

发布于 2022-06-11 13:47:05

例如(包括清理其他代码):

代码语言:javascript
复制
Sub ReformatLaTeX()
Application.ScreenUpdating = False
Dim StrLnk As String
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Format = False
    .Forward = True
    .Wrap = wdFindContinue
    .MatchWildcards = True
    .Replacement.Text = "\1"
    .Replacement.Font.SmallCaps = True
    .Text = "\<LaTeX-SmallCaps\>(*@)\</LaTeX-SmallCaps\>"
    .Execute Replace:=wdReplaceAll
    .Replacement.ClearFormatting
    .Replacement.Font.Size = 13
    .Replacement.Font.Name = "Calibri"
    .Text = "\<LaTeX-SerifFont\>(*@)\</LaTeX-SerifFont\>"
    .Execute Replace:=wdReplaceAll
    .Replacement.Font.Size = 12
    .Replacement.Font.Name = "Courier New"
    .Text = "\<LaTeX-MonospaceFont\>(*@)\</LaTeX-MonospaceFont\>"
    .Execute Replace:=wdReplaceAll
    .Replacement.ClearFormatting
    .Text = "\<LaTeX-href-http\>*@\<\/LaTeX-href-http\>"
    .Replacement.Text = ""
    .Wrap = wdFindStop
  End With
  Do While .Find.Execute
    StrLnk = Split(Split(.Text, "</LaTeX-href-http>")(0), "<LaTeX-href-http>")(1)
    .Hyperlinks.Add Anchor:=.Duplicate, Address:=StrLnk, TextToDisplay:=StrLnk
    .Start = .Hyperlinks(1).Range.End
  Loop
End With
Application.ScreenUpdating = True
End Sub
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72582813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档