Thêm Báo giá Thông minh thông qua Văn bản Macro (Microsoft Word)
Mary sử dụng macro khá nhiều để thêm văn bản vào tài liệu của mình. Vấn đề là nếu văn bản được thêm vào có chứa dấu nháy đơn, những dấu nháy đơn được thêm vào văn bản là “thẳng” chứ không phải “thông minh”. Cô ấy chỉ ra rằng cô ấy có cài đặt Tự động định dạng khi bạn nhập để yêu cầu Word sử dụng dấu ngoặc kép thông minh thay vì dấu ngoặc kép thẳng, nhưng điều đó không ảnh hưởng đến văn bản được chèn bởi macro của tôi.
Khi bạn chèn văn bản vào tài liệu bằng cách sử dụng macro thay vì nhập, văn bản trong mỗi trường hợp được Word xử lý khác nhau. Văn bản bạn nhập được xử lý khi mỗi ký tự được nhập. Văn bản được chèn bằng macro được coi giống như văn bản được dán vào tài liệu hơn. Vì vậy, nếu bạn nhập “đây là văn bản của tôi”, Word sẽ xử lý sau mỗi ký tự. Điều đó có nghĩa là có thời gian để chương trình kiểm tra Tự động định dạng và Tự sửa lỗi và tất cả những việc còn lại mà Word thực hiện để xử lý văn bản.
Khi bạn sử dụng macro để nhập cùng một văn bản, nó sẽ được chèn dưới dạng một khối, như thể bạn dán nó vào vị trí. Điều này có nghĩa là bất kỳ ký tự nào ở giữa văn bản (chẳng hạn như dấu ngoặc kép hoặc dấu nháy đơn) đã được xử lý bằng Tự động định dạng sẽ không bị “bắt” và xử lý. Điều này có nghĩa là các dấu ngoặc kép không được thay đổi thành dấu ngoặc kép thông minh nếu chúng nằm trong văn bản được chèn bởi macro của bạn.
Có một số cách bạn có thể tiếp cận một giải pháp cho vấn đề này. Đầu tiên là có macro của bạn, sau khi nó chèn tất cả văn bản của bạn, hãy thực hiện thao tác tìm và thay thế để thay thế tất cả các dấu ngoặc kép bằng dấu ngoặc kép và dấu nháy đơn bằng dấu nháy đơn. Điều này nghe có vẻ lạ, nhưng nếu bạn đã đặt Tự động định dạng khi bạn nhập để sử dụng dấu ngoặc kép thông minh, thao tác tìm và thay thế sẽ kết thúc việc thay đổi các dấu ngoặc kép thành dấu ngoặc kép thông minh.
Cách tiếp cận này là cách để thực hiện nếu macro của bạn chèn nhiều văn bản vào tài liệu. Nếu nó đang chèn các đoạn văn bản nhỏ hơn, thì sẽ dễ dàng hơn để đảm bảo rằng macro đang chèn mã ASCII chính xác cho dấu ngoặc kép thông minh để bắt đầu. Mã ASCII cho báo giá thông thường là 34, nhưng báo giá mở thông minh có mã là 147 và báo giá đóng là 148. Có sự khác biệt tương tự trong các mã được sử dụng cho dấu nháy đơn. Nếu bạn sử dụng hàm Chr để chèn ký tự thích hợp, bạn sẽ luôn có dấu ngoặc kép mà bạn muốn.
Một cách để làm điều đó là sử dụng mã tương tự như sau gần đầu macro của bạn:
If Options.AutoFormatAsYouTypeReplaceQuotes = True Then sAposOpen = Chr(145) sAposClose = Chr(146) sQuoteOpen = Chr(147) sQuoteClose = Chr(148) Else sAposOpen = Chr(39) sAposClose = Chr(39) sQuoteOpen = Chr(34) sQuoteClose = Chr(34) End If
Mã này kiểm tra xem cài đặt Tự động định dạng khi bạn nhập có được bật cho dấu ngoặc kép thông minh hay không. Nếu đúng như vậy, thì bốn biến được đặt thành mã ASCII thích hợp cho dấu ngoặc kép thông minh. Nếu nó không được bật, thì các biến được đặt thành mã thích hợp cho dấu ngoặc kép. Sau đó, bạn có thể sử dụng các biến này sau đó trong macro của mình khi bạn lắp ráp và chèn văn bản.
Ví dụ, nếu bạn muốn chèn văn bản “nhà anh trai tôi ở dưới phố”, bạn có thể chèn theo cách sau:
sMyString = "my brother" & sAposClose & "s house is down the street" Selection.InsertAfter " " & sMyString
Nếu bạn thấy cách tiếp cận này khó chịu (chia nhỏ chuỗi của bạn theo cách này), thì có một lựa chọn khác. Bạn có thể tạo hàm của riêng mình để thay thế thích hợp trong chuỗi của bạn cùng một lúc.
Macro sau sẽ thực hiện công việc một cách tốt đẹp:
Function RepQuotes(sRaw As String) As String Dim sTemp As String Dim sAposOpen As String Dim sAposClose As String Dim sQuoteOpen As String Dim sQuoteClose As String If Options.AutoFormatAsYouTypeReplaceQuotes = True Then sAposOpen = Chr(145) sAposClose = Chr(146) sQuoteOpen = Chr(147) sQuoteClose = Chr(148) Else sAposOpen = Chr(39) sAposClose = Chr(39) sQuoteOpen = Chr(34) sQuoteClose = Chr(34) End If sTemp = Replace(sRaw, " " & Chr(39), sAposOpen) sTemp = Replace(sTemp, Chr(39), sAposClose) sTemp = Replace(sTemp, " " & Chr(34), sQuoteOpen) sTemp = Replace(sTemp, Chr(34), sQuoteClose) RepQuotes = sTemp End Function
Những gì bạn làm là xây dựng các chuỗi văn bản của mình như bình thường, sau đó chuyển chúng qua macro RepQuotes. Macro xác định các dấu ngoặc kép thích hợp để sử dụng và sau đó thực hiện các chuyển đổi. Nó xác định xem một trích dẫn là trích dẫn mở đầu hay trích dẫn kết thúc trong văn bản bằng cách có khoảng trống trước câu trích dẫn hay không. Nếu có, nó được cho là một trích dẫn mở đầu; nếu không, thì đó là một trích dẫn kết thúc.
_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 (11833) áp dụng cho Microsoft Word 2007, 2010, 2013 và 2016. 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: