Không có gì để thêm, tôi muốn thay đổi kiểu của tất cả các tham chiếu chéo tôi có trong tài liệu Word 2007 cùng một lúc. Nhưng tôi không biết làm thế nào để làm điều đó. Điều này có thể giải quyết như thế nào?
Không có gì để thêm, tôi muốn thay đổi kiểu của tất cả các tham chiếu chéo tôi có trong tài liệu Word 2007 cùng một lúc. Nhưng tôi không biết làm thế nào để làm điều đó. Điều này có thể giải quyết như thế nào?
Câu trả lời:
Một số loại tham chiếu chéo được tự động định dạng theo kiểu "tham chiếu cường độ cao", nhưng hầu hết được định dạng là văn bản "bình thường".
Để áp dụng kiểu "tham chiếu mãnh liệt" cho văn bản của tham chiếu chéo:
Để thay đổi giao diện của tất cả văn bản của một kiểu đã cho:
Để áp dụng một kiểu cho tất cả các tham chiếu chéo cùng một lúc:
^19 REF
Xem trang này để biết thêm thông tin về các mã đặc biệt trong Tìm và Thay thế.
Đây là một macro sẽ thêm công tắc \* mergeformat
cho mỗi trường. Công tắc này là cần thiết để giữ cho định dạng không bị mất nếu bạn thực hiện cập nhật trường. Bạn có thể gán macro cho tổ hợp phím và nó sẽ lần lượt đi qua các trường một lần cho mỗi lần bạn nhấn tổ hợp phím. Bạn cũng có thể chỉnh sửa macro để lặp lại toàn bộ tài liệu để tự động hóa quy trình.
Sub mf()
'
' mf Macro
' Find cross references and add \* mergeformat
'
Selection.Find.ClearFormatting
With Selection.Find
.Text = "^19 REF"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.TypeText Text:="\* mergeformat "
Selection.Find.Execute
End Sub
Sử dụng macro sau để thêm CHARFORMAT cho tất cả các tham chiếu chéo. Macro này thêm chuỗi vào trường chỉ khi nó chưa có ở đó.
Sub SetCHARFORMAT()
'
' Set CHARFORMAT switch to all {REF} fields. Replace MERGEFORMAT.
'
'
Dim oField As Field
Dim oRng As Range
For Each oField In ActiveDocument.Fields
'For Each oField In Selection.Fields
If InStr(1, oField.Code, "REF ") = 2 Then
If InStr(1, oField.Code, "MERGEFORMAT") <> 0 Then
oField.Code.Text = Replace(oField.Code.Text, "MERGEFORMAT", "CHARFORMAT")
End If
If InStr(1, oField.Code, "CHARFORMAT") = 0 Then
oField.Code.Text = oField.Code.Text + "\* CHARFORMAT "
End If
End If
Next oField
End Sub
Sử dụng macro này để định dạng tất cả các tham chiếu chéo với kiểu "Tham chiếu tinh tế" (đảm bảo bạn có kiểu như vậy và mã trường được hiển thị):
Sub SetCrossRefStyle()
'
' Macro to set styole of all cross references to "Subtle Reference"
'
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Style = ActiveDocument.Styles( _
"Subtle Reference")
With Selection.Find
.Text = "^19 REF"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchKashida = False
.MatchDiacritics = False
.MatchAlefHamza = False
.MatchControl = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Nhấn Alt+ F9để ẩn mã trường
chỉnh sửa macro được tải lên bởi cyborg, chúng ta có thể dễ dàng tự động hiển thị và ẩn mã trường. để mỗi lần chúng tôi muốn cập nhật, chúng tôi không phải sử dụng chuyển đổi mã trường. Tôi đã sử dụng mã sau đây để thêm chuyển đổi mã trường.
ActiveDocument.ActiveWindow.View.ShowFieldCodes = False
Macro hoàn chỉnh như sau:
Sub SetCrossRefStyle()
'
' Macro to set styole of all cross references to "Subtle Reference"
'
'
ActiveDocument.ActiveWindow.View.ShowFieldCodes = True
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Style = ActiveDocument.Styles( _
"Subtle Reference")
With Selection.Find
.Text = "^19 REF"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchKashida = False
.MatchDiacritics = False
.MatchAlefHamza = False
.MatchControl = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
ActiveDocument.ActiveWindow.View.ShowFieldCodes = False
End Sub
Đây là lần đầu tiên tôi sử dụng macro để tăng tốc công việc của mình bằng từ ngữ. cảm ơn cyborg vì vĩ mô hữu ích như vậy.
Macro này mở hộp thoại Tham chiếu chéo để chèn tham chiếu chéo tại vị trí con trỏ hiện tại.
Khi bạn đóng hộp thoại Xref sau khi chèn tham chiếu, macro sẽ tiếp tục định dạng tham chiếu chéo được chèn vào siêu ký tự.
Sub XrefSuper()
'
' This opens the Cross Reference dialogue box to insert a cross reference at the current cursor position.
' When the dialogue box is closed after inserting the reference the macro resumes to format the inserted cross reference to superscript.
'
'
Dim wc As Integer
wc = ActiveDocument.Characters.Count
Dim dlg As Dialog
Set dlg = Dialogs(wdDialogInsertCrossReference)
dlg.Show 'Open dialogue and perform the insertion from the dialog box)
'Macro continues after closing CrossRef dialogue box
If wc = ActiveDocument.Characters.Count Then Exit Sub 'If we failed to insert something then exit
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.Font.Superscript = wdToggle
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.Font.Superscript = wdToggle
End Sub
Cảm ơn Graham Skan tại ExpertsExchange về cách mở đoạn hội thoại Xref.
Kết hợp các câu trả lời ở trên với một chức năng khác để lặp qua tài liệu 'câu chuyện', để áp dụng kiểu dáng trên thân tài liệu, tiêu đề, chân trang và văn bản trên hình dạng.
Chỉ cần gọi macro SetCrossRefStyle () bên dưới để áp dụng kiểu "Tham chiếu dữ dội" cho tất cả các tham chiếu chéo.
Sub m_SetCHARFORMAT(textRanges As Collection)
' https://superuser.com/questions/13531/is-it-possible-to-assign-a-specific-style-to-all-cross-references-in-word-2007
'
' Set CHARFORMAT switch to all {REF} fields. Replace MERGEFORMAT.
' Requires ActiveDocument.ActiveWindow.View.ShowFieldCodes = True
'
Dim oField As Field
Dim oRng As Range
For Each oRng In textRanges
For Each oField In oRng.Fields
If InStr(1, oField.Code, "REF ") = 2 Then
If InStr(1, oField.Code, "MERGEFORMAT") <> 0 Then
oField.Code.Text = Replace(oField.Code.Text, "MERGEFORMAT", "CHARFORMAT")
End If
If InStr(1, oField.Code, "CHARFORMAT") = 0 Then
oField.Code.Text = oField.Code.Text + "\* CHARFORMAT "
End If
End If
Next oField
Next oRng
End Sub
Sub m_AddCrossRefStyle(textRanges As Collection)
' https://superuser.com/questions/13531/is-it-possible-to-assign-a-specific-style-to-all-cross-references-in-word-2007
'
' Macro to set style of all cross references to "Intense Reference"
' Requires ActiveDocument.ActiveWindow.View.ShowFieldCodes = True
'
For Each oRng In textRanges
oRng.Find.ClearFormatting
oRng.Find.Replacement.ClearFormatting
oRng.Find.Replacement.Style = ActiveDocument.Styles("Intense Reference")
With oRng.Find
.Text = "^19 REF"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchKashida = False
.MatchDiacritics = False
.MatchAlefHamza = False
.MatchControl = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
oRng.Find.Execute Replace:=wdReplaceAll
Next oRng
End Sub
Function m_GetAllTextRanges() As Collection
' https://wordmvp.com/FAQs/Customization/ReplaceAnywhere.htm
' https://www.mrexcel.com/forum/excel-questions/443052-returning-collection-function.html
'
' Get text ranges in all document parts.
'
Set m_GetAllTextRanges = New Collection
For Each rngStory In ActiveDocument.StoryRanges
'Iterate through all linked stories
Do
m_GetAllTextRanges.Add rngStory
On Error Resume Next
Select Case rngStory.StoryType
Case 6, 7, 8, 9, 10, 11
If rngStory.ShapeRange.Count > 0 Then
For Each oShp In rngStory.ShapeRange
If oShp.TextFrame.HasText Then
m_GetAllTextRanges.Add oShp.TextFrame.TextRange
End If
Next
End If
Case Else
'Do Nothing
End Select
On Error GoTo 0
'Get next linked story (if any)
Set rngStory = rngStory.NextStoryRange
Loop Until rngStory Is Nothing
Next
End Function
Sub SetCrossRefStyle()
'
' 1. Get all text ranges since Selection.Find only works on document body, but not on headers/footers
' 2. Add CHARFORMAT to make styling persistent
' 3. Add styling to all references
'
Dim textRanges As Collection
Set textRanges = m_GetAllTextRanges
ActiveDocument.ActiveWindow.View.ShowFieldCodes = True
m_SetCHARFORMAT textRanges
m_AddCrossRefStyle textRanges
ActiveDocument.ActiveWindow.View.ShowFieldCodes = False
End Sub