Kiểm soát định dạng của tham chiếu chéo (Microsoft Word)
Stephen hỏi liệu có thể kiểm soát định dạng của các tham chiếu chéo do Word chèn vào không. Khi anh ta chèn một nhãn và số chẳng hạn như Bảng 1 hoặc Hình 12, anh ta muốn nhãn đó viết thường (bảng, hình) và một khoảng cách không ngắt giữa nhãn và số.
Không có cách nào để kiểm soát kiểu định dạng tham chiếu chéo này trong Word. Rõ ràng, bạn có thể thay đổi các tham chiếu chéo theo cách thủ công sau khi đặt chúng, nhưng bất cứ khi nào bạn cập nhật các trường, định dạng ban đầu do Word chọn sẽ được sử dụng cho chúng. Có một số giải pháp dựa trên vĩ mô mà bạn có thể thử. Giải pháp đầu tiên sẽ thay đổi mã trường thực tế được sử dụng cho trường:
Sub FieldRefChanges1() On Error Resume Next Dim oStoryRng As Range Dim oFld As Field For Each oStoryRng In ActiveDocument.StoryRanges For Each oFld In oStoryRng.Fields If oFld.Type = wdFieldRef And oFld.Result.Words.Count <= 2 Then 'add format switch with lowercase option to field codes oFld.Code.Text = oFld.Code.Text & "\* lower " 'updates the field results to display the new format oFld.Update End If Next oFld Next oStoryRng End Sub
Macro bao gồm một vài vòng lặp For lồng nhau. Phần đầu tiên xem từng câu chuyện trong tài liệu và phần thứ hai đi qua từng trường trong mỗi câu chuyện. Sau đó, một câu lệnh If được sử dụng để đảm bảo rằng trường là trường REF (loại được sử dụng cho các tham chiếu chéo) và kết quả của trường là hai từ trở xuống (như trong Bảng 1 hoặc Hình 12).
Nếu các tiêu chí này được đáp ứng, thì macro thực hiện thay đổi đối với mã trường thực, thêm công tắc dẫn đến trường được hiển thị bằng chữ thường.
Có một số hạn chế đối với macro này. Đầu tiên, nếu bạn chạy nó nhiều lần, công tắc \ * dưới sẽ được thêm vào các trường REF nhiều lần. Thứ hai, macro không thay đổi không gian trong trường dẫn đến không gian không ngắt.
Để khắc phục cả hai vấn đề, chỉ cần sửa đổi macro để nó tự động hóa quy trình thủ công mà bạn sẽ thực hiện để thay đổi kết quả macro.
Sub FieldRefChanges2() On Error Resume Next Dim oStoryRng As Range Dim oFld As Field Dim sTemp As String Dim J As String For Each oStoryRng In ActiveDocument.StoryRanges For Each oFld In oStoryRng.Fields If oFld.Type = wdFieldRef And oFld.Result.Words.Count <= 2 Then sTemp = oFld.Result.Text sTemp = LCase(sTemp) J = InStr(sTemp, " ") sTemp = Left(sTemp, J - 1) & Chr(160) & _ Mid(sTemp, J + 1, Len(sTemp) - J) oFld.Result.Text = sTemp End If Next oFld Next oStoryRng End Sub
Macro này về cơ bản giống với macro trước đó, ngoại trừ nó hoạt động hoàn toàn với văn bản kết quả cho trường. Văn bản được gán cho biến sTemp, biến này sau đó được chuyển thành chữ thường. Vị trí của không gian được xác định, và nó được thay thế bằng không gian không phá vỡ. Kết quả sau đó được đưa trở lại văn bản kết quả cho trường.
_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 (8479) áp dụng cho Microsoft Word 2007, 2010, 2013, 2016, 2019 và Word trong Office 365. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện menu cũ hơn của Word tại đây: