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 là 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 (141) áp dụng cho Microsoft Word 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Word (Word 2007 và sau này) tại đây: