本代码基于Word和WPS的宏功能,所以使⽤前需要确保宏功能是启⽤状态的,使⽤Zotero软件插⼊好参考⽂献并且确保格式正确,才能顺利运⾏该宏代码!
配置成功,永久都可以使⽤的。建议⼤家再看这个之前先去详细阅读⼀下使⽤注意事项。
这个宏代码⽀持Word和WPS,苹果电脑和Windows电脑都⽀持,配置⽅法基本上也都是⼀样的,⼤同⼩异!!
Public Sub ZoteroLinkCitation()
' 声明变量(@小红书软件管家)
Dim nStart As Long, nEnd As Long
Dim title As String, titleAnchor As String
Dim fieldCode As String, numOrYear As String
Dim n1 As Long, n2 As Long
Dim aField As Field
Dim Paper_i As Integer
Dim j As Integer
' 保存当前选择位置
nStart = Selection.Start
nEnd = Selection.End
Application.ScreenUpdating = False
On Error GoTo ErrorHandler
' 步骤1:查找并标记Zotero参考文献部分
ActiveWindow.View.ShowFieldCodes = True
Selection.Find.ClearFormatting
With Selection.Find
.Text = "^d ADDIN ZOTERO_BIBL"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
' 执行查找
If Selection.Find.Execute Then
' 为参考文献部分添加书签
With ActiveDocument.Bookmarks
If .Exists("Zotero_Bibliography") Then
.Item("Zotero_Bibliography").Delete
End If
.Add Range:=Selection.Range, name:="Zotero_Bibliography"
.DefaultSorting = wdSortByName
.ShowHidden = True
End With
Else
MsgBox "未找到Zotero参考文献部分!", vbExclamation
GoTo CleanUp
End If
ActiveWindow.View.ShowFieldCodes = False
' 步骤2:处理每个Zotero引用字段
For Each aField In ActiveDocument.Fields
' 检查是否为Zotero文内引用
If InStr(aField.Code, "ADDIN ZOTERO_ITEM") > 0 Then
fieldCode = aField.Code
Paper_i = 1
' 解析字段中的每个引用项目
Do While InStr(fieldCode, """title"":""") > 0
' 提取标题
n1 = InStr(fieldCode, """title"":""") + Len("""title"":""")
n2 = InStr(Mid(fieldCode, n1), """,""")
If n2 > 0 Then
n2 = n2 + n1 - 1
title = Mid(fieldCode, n1, n2 - n1)
' 创建书签锚点名称(清理特殊字符)
titleAnchor = CleanAnchorName(title)
' 在参考文献中查找对应条目并添加书签
If FindAndBookmarkReference(title, titleAnchor) Then
' 为引用创建超链接
Call CreateHyperlinkForCitation(aField, titleAnchor, Paper_i)
Paper_i = Paper_i + 1
End If
' 移除已处理的部分
fieldCode = Mid(fieldCode, n2 + 1)
Else
Exit Do
End If
Loop
End If
Next aField
CleanUp:
' 恢复原始选择
ActiveDocument.Range(nStart, nEnd).Select
Application.ScreenUpdating = True
MsgBox "Zotero交叉引用处理完成!", vbInformation
Exit Sub
ErrorHandler:
Application.ScreenUpdating = True
MsgBox "处理过程中出现错误:" & Err.Description, vbCritical
Resume CleanUp
End Sub
' 辅助函数:清理锚点名称
Private Function CleanAnchorName(inputText As String) As String
Dim cleanText As String
Dim i As Integer
Dim invalidChars As String
' 定义无效字符
invalidChars = " #&:,-?'.()!@$%^*+=[]{}|\"
cleanText = inputText
' 替换无效字符为下划线
For i = 1 To Len(invalidChars)
cleanText = Replace(cleanText, Mid(invalidChars, i, 1), "_")
Next i
' 限制长度并移除连续的下划线
cleanText = Left(cleanText, 40)
Do While InStr(cleanText, "__") > 0
cleanText = Replace(cleanText, "__", "_")
Loop
' 移除开头和结尾的下划线
If Left(cleanText, 1) = "_" Then cleanText = Mid(cleanText, 2)
If Right(cleanText, 1) = "_" Then cleanText = Left(cleanText, Len(cleanText) - 1)
CleanAnchorName = cleanText
End Function
' 辅助函数:在参考文献中查找并添加书签
Private Function FindAndBookmarkReference(title As String, anchorName As String) As Boolean
On Error GoTo ErrorHandler
' 跳转到参考文献部分
Selection.GoTo What:=wdGoToBookmark, name:="Zotero_Bibliography"
' 查找标题
Selection.Find.ClearFormatting
With Selection.Find
.Text = Left(title, 100) ' 使用标题的前100个字符进行搜索
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
If Selection.Find.Execute Then
' 选择整个段落
Selection.Paragraphs(1).Range.Select
' 添加书签
With ActiveDocument.Bookmarks
If .Exists(anchorName) Then
.Item(anchorName).Delete
End If
.Add Range:=Selection.Range, name:=anchorName
.DefaultSorting = wdSortByName
.ShowHidden = True
End With
FindAndBookmarkReference = True
Else
FindAndBookmarkReference = False
End If
Exit Function
ErrorHandler:
FindAndBookmarkReference = False
End Function
' 辅助函数:为引用创建超链接
Private Sub CreateHyperlinkForCitation(targetField As Field, anchorName As String, paperIndex As Integer)
Dim commaPositions() As Long
Dim startPosition As Long, commaPosition As Long
Dim numOrYear As String
Dim originalStyle As style
Dim i As Integer
On Error GoTo ErrorHandler
' 选择字段
targetField.Select
' 找到所有逗号位置
startPosition = 1
ReDim commaPositions(1 To 1)
' 查找逗号位置(假设作者和年份用逗号分隔)
Do
commaPosition = InStr(startPosition, Selection.Text, ",")
If commaPosition > 0 Then
commaPositions(UBound(commaPositions)) = commaPosition
startPosition = commaPosition + 1
ReDim Preserve commaPositions(1 To UBound(commaPositions) + 1)
End If
Loop While commaPosition > 0
' 定位到特定的引用项
With Selection.Find
.Text = "^#"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
If Selection.Find.Execute Then
Selection.MoveLeft Unit:=wdCharacter, Count:=1
' 根据paperIndex移动到正确位置
If UBound(commaPositions) >= paperIndex And paperIndex > 1 Then
Selection.MoveRight Unit:=wdCharacter, Count:=commaPositions(paperIndex - 1)
End If
Selection.Find.Execute
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend
numOrYear = Trim(Selection.Range.Text)
' 保存原始样式
Set originalStyle = Selection.style
' 创建超链接
With ActiveDocument.Hyperlinks.Add(Anchor:=Selection.Range, Address:="", SubAddress:=anchorName, ScreenTip:="点击跳转到参考文献", TextToDisplay:=numOrYear)
.Range.Font.Underline = wdUnderlineNone ' 移除下划线
.Range.Font.Color = wdColorAutomatic ' 设置为自动颜色
End With
End If
Exit Sub
ErrorHandler:
' 处理错误但不中断整个过程
End Sub
先检查宏功能是否开启,必须先启⽤宏功能。
- 打开 Word:启动 Microsoft Word 程序。
- 进入“文件”选项卡:点击左上角的“文件”按钮。
- 选择“选项”:在文件菜单中选择“选项”。
- 进入“信任中心”:在弹出的“Word 选项”窗口中,点击左侧的“信任中心”。
- 点击“信任中心设置”:在右侧的信任中心部分,点击下方的“信任中心设置”按钮。
- 检查宏设置:在“信任中心”设置窗口中,选择“宏设置”选项。在这里你可以查看当前的宏安全设置。你可以选择不同的宏设置选项:
- 启用所有宏(不推荐):允许所有宏运行(此选项可能会带来安全风险)。
选择适合你需求的设置,点击“确定”保存。
![图片[1]-Zotero交叉引用代码及使用方法-不求人资源站](https://www.bqrzy.com/wp-content/uploads/2026/01/20260118231213794-image.png)
打开 word ,选择 “视图 ”–“宏”–“查看宏”
![图片[2]-Zotero交叉引用代码及使用方法-不求人资源站](https://www.bqrzy.com/wp-content/uploads/2026/01/20260118231226486-image.png)
创建宏
在“宏名”处输入:ZoteroLinkCitation 点击“创建”,进入宏编辑器
![图片[3]-Zotero交叉引用代码及使用方法-不求人资源站](https://www.bqrzy.com/wp-content/uploads/2026/01/20260118231244546-image.png)
把原来的代码删掉,复制这个文本里面的代码,粘贴到代码框
![图片[4]-Zotero交叉引用代码及使用方法-不求人资源站](https://www.bqrzy.com/wp-content/uploads/2026/01/20260118231258712-image.png)
粘贴以后,键盘按CTRL+S 保存,退出宏编辑器 回到word
![图片[5]-Zotero交叉引用代码及使用方法-不求人资源站](https://www.bqrzy.com/wp-content/uploads/2026/01/20260118231319557-image.png)
依次点击“宏”–“查看宏”,选择“ZoteroLinkCitation “运行”
![图片[6]-Zotero交叉引用代码及使用方法-不求人资源站](https://www.bqrzy.com/wp-content/uploads/2026/01/20260118231328852-image.png)
“确认”
![图片[7]-Zotero交叉引用代码及使用方法-不求人资源站](https://www.bqrzy.com/wp-content/uploads/2026/01/20260118231348748-image.png)
单击引注 或者按住ctrl并点击,可以直接定位到文献表
![图片[8]-Zotero交叉引用代码及使用方法-不求人资源站](https://www.bqrzy.com/wp-content/uploads/2026/01/20260118231400850-image.png)
二、wps中配置
先检查宏功能是否开启,必须先启⽤宏功能。
wps某些版本可能不支持宏功能,确保您的wps支持宏功能。
![图片[9]-Zotero交叉引用代码及使用方法-不求人资源站](https://www.bqrzy.com/wp-content/uploads/2026/01/20260118231416624-image.png)
创建宏
“工具”–“运行宏”
在“宏名”处输入:ZoteroLinkCitation 点击“创建”,进入宏编辑器
![图片[10]-Zotero交叉引用代码及使用方法-不求人资源站](https://www.bqrzy.com/wp-content/uploads/2026/01/20260118231436789-image.png)
把原来的代码删掉,复制这个文本里面的代码,粘贴到代码框
![图片[11]-Zotero交叉引用代码及使用方法-不求人资源站](https://www.bqrzy.com/wp-content/uploads/2026/01/20260118231447816-image.png)
[zotero交叉引用代码.txt]
粘贴以后,找到右上角 保存,如果wps弹出确认框,选“是”,退出宏编辑器 回到wps
![图片[12]-Zotero交叉引用代码及使用方法-不求人资源站](https://www.bqrzy.com/wp-content/uploads/2026/01/20260118231459421-image.png)
“开发工具”–“运行宏”–选择“ZoteroLinkCitatiorp”–“运行”
![图片[13]-Zotero交叉引用代码及使用方法-不求人资源站](https://www.bqrzy.com/wp-content/uploads/2026/01/20260118231508133-image.png)
确定
![图片[14]-Zotero交叉引用代码及使用方法-不求人资源站](https://www.bqrzy.com/wp-content/uploads/2026/01/20260118231519508-image.png)
单击引注 或者按住ctrl并点击,可以直接定位到文献表
THE END

