Jason là một biên tập viên sinh viên của một tạp chí luật học. Là một phần của quá trình xuất bản, anh ấy cần kiểm tra từng câu xem có đạo văn và độ chính xác hay không cũng như mọi trích dẫn để đảm bảo định dạng và hỗ trợ phù hợp.

Về cơ bản, điều này có nghĩa là mỗi câu phải được hỗ trợ bởi một trích dẫn được đặt trong phần chú thích. Hiện tại, nhân viên sao chép và dán thủ công mọi câu văn bản, chú thích cuối trang và số chú thích từ bản thảo của tác giả (tài liệu Word) vào tài liệu Word của biên tập viên, sau đó được sử dụng để kiểm tra. Jason tự hỏi liệu có cách nào để tự động hóa quá trình sao chép “số chú thích cuối trang”, “câu từ tài liệu bài báo” và “nội dung chú thích gốc” từ tài liệu nguồn bản thảo vào tài liệu trang tính hay không.

Mỗi nhiệm vụ mà Jason đề cập có thể được thực hiện theo chương trình, với một số ngoại lệ khó chịu. Không quá khó để xem qua các bộ sưu tập chú thích cuối trang và chú thích cuối, trong VBA và trích xuất thông tin từ chúng. Sau đó, thông tin này có thể được chuyển sang một tài liệu mới có thể được sử dụng làm trang tính của người biên tập. Phần khó chịu là các số chú thích cuối trang và chú thích cuối trang là động, và do đó không dễ truy cập.

Có thể tìm thấy một cuộc thảo luận đầy đủ về chất kích thích này tại trang web này:

http://www.vbaexpress.com/forum/showthread.php?31231

Chính xác cách bạn có thể thực hiện macro để thực hiện việc chuyển thông tin từ tài liệu này sang tài liệu khác, phần lớn phụ thuộc vào các đặc điểm của thông tin trong tài liệu của tác giả. Ví dụ, tài liệu của tác giả có bao gồm một hoặc hai dấu cách sau một câu không? Nó có cho phép nhiều chú thích cuối mỗi câu không? Nó có cho phép chú thích cuối trang ngoài chú thích cuối trang không? Nó có bao gồm các bảng không?

Vấn đề là có một số cân nhắc có thể ảnh hưởng đến sự phát triển của một vĩ mô. Điều này có nghĩa là bất kỳ macro nào cũng cần được tinh chỉnh phù hợp với tài liệu nguồn mà bạn đang làm việc — nghĩa là phải thử nghiệm rất nhiều. Tuy nhiên, để cung cấp cho bạn điểm bắt đầu, hãy xem xét các macro sau. Họ sẽ sao chép các câu, chú thích cuối trang và chú thích cuối (nếu có) từ một tài liệu nguồn sang một tài liệu mới.

Sub FootnotesEndnotes()

Dim fNote As Footnote     Dim eNote As Endnote     Dim aRange As Range     Dim sText As String     Dim rText As String     Dim eRef As String     Dim newDoc As Document     Dim oldDoc As Document

Set oldDoc = ActiveDocument     Set newDoc = Documents.Add

sText = "---------------FOOTNOTES---------------" & vbCr     newDoc.Content.InsertAfter sText

oldDoc.Activate     For Each fNote In ActiveDocument.Footnotes         Set aRange = fNote.Reference         aRange.MoveStart unit:=wdSentence, Count:=-1         aRange.MoveEnd unit:=wdSentence         sText = aRange.Text         rText = fNote.Range.Text         With fNote.Reference.Characters.First             .Collapse             .InsertCrossReference wdRefTypeFootnote, _               wdFootnoteNumberFormatted, fNote.Index             eRef = .Characters.First.Fields(1).Result             Selection.Start = fNote.Reference.Start - Len(eRef)

Selection.End = fNote.Reference.Start             Selection.Delete         End With         Call WriteNewdoc(newDoc, sText, rText, eRef, "Footnote Text")

Next fNote

sText = "---------------ENDNOTES----------------" & vbCr     newDoc.Content.InsertAfter vbCr & vbCr & sText

For Each eNote In ActiveDocument.Endnotes         Set aRange = eNote.Reference         aRange.MoveStart unit:=wdSentence, Count:=-1         aRange.MoveEnd unit:=wdSentence         sText = aRange.Text         rText = eNote.Range.Text         With eNote.Reference.Characters.First             .Collapse             .InsertCrossReference wdRefTypeEndnote, _               wdEndnoteNumberFormatted, eNote.Index             eRef = .Characters.First.Fields(1).Result             Selection.Start = eNote.Reference.Start - Len(eRef)

Selection.End = eNote.Reference.Start             Selection.Delete         End With         Call WriteNewdoc(newDoc, sText, rText, eRef, "Endnote Text")

Next eNote

newDoc.Activate End Sub

Sub WriteNewdoc(newDoc As Document, sText As String, rText As String, _        eRef As String, aStyle As String)

Dim sText1 As String     Dim sText2 As String     Dim dRange As Range     Dim k As Long     Dim curDoc As Document

Set curDoc = ActiveDocument     newDoc.Activate     k = InStr(sText, Chr(2))

If k = 1 Then sText = Mid(sText, 2) 'in case previous sentence has note     sText = Trim(sText)

k = InStr(sText, Chr(2))

If k = 0 Then         sText = sText & Chr(2)

k = Len(sText)

End If     If k > 1 Then         sText1 = Left(sText, k - 1)

Else         sText1 = ""

End If     If k = Len(sText) Then         sText2 = ""

Else         sText2 = Mid(sText, k + 1)

End If     If Len(sText2) > 0 Then         If Mid(sText2, Len(sText2), 1) = Chr(13) Then             sText2 = Left(sText2, Len(sText2) - 1)

End If     End If     Set dRange = newDoc.Content     dRange.Collapse Direction:=wdCollapseEnd     dRange.Select     With Selection         .InsertAfter vbCr & sText1         .Font.Superscript = False         .Collapse Direction:=wdCollapseEnd         .InsertAfter eRef         .Font.Superscript = True         .Collapse Direction:=wdCollapseEnd         .InsertAfter " " & sText2 & vbCr         .Font.Superscript = False         .Collapse Direction:=wdCollapseEnd         .InsertAfter eRef         .Font.Superscript = True         .Collapse Direction:=wdCollapseEnd         .InsertAfter " " & rText & vbCr & vbCr         .Font.Superscript = False         .Style = aStyle     End With     curDoc.Activate End Sub

Đây (một lần nữa) chỉ là một điểm khởi đầu. Bạn sẽ cần phải kiểm tra và tinh chỉnh các macro với tài liệu của mình để đảm bảo chúng thực hiện những gì bạn mong đợi.

Nếu bạn đang tìm kiếm các nguồn bổ sung để hỗ trợ phát triển một macro như vậy, bạn có thể thử cuốn sách này. Nó là một freebie và nó có thể có một số macro (hoặc ví dụ) mà bạn có thể điều chỉnh cho phù hợp với các mục đích cụ thể của mình:

http://www.archivepub.co.uk/book.html

Đừng ngạc nhiên nếu macro của bạn trở nên khá phức tạp theo thời gian. Điều này có thể xảy ra bất cứ khi nào bạn tạo macro để thực hiện các tác vụ mà con người có thể làm với tương đối ít suy nghĩ.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên các trang WordTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

WordTips là nguồn của bạn để đào tạo Microsoft Word hiệu quả về chi phí.

(Microsoft Word là phần mềm xử lý văn bản phổ biến nhất trên thế giới.) Mẹo này (12724) áp dụng cho Microsoft Word 2007, 2010, 2013, 2016, 2019 và Word trong Office 365.