Tự động hóa quy trình thủ công với Macro (Microsoft Word)
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.