Shelley đang phát triển một macro thay đổi tất cả các hoán vị viết hoa của “với điều kiện là” (“Đã cung cấp điều đó”, “Đã cung cấp điều đó”, v.v.)

thành chữ thường. Điều đó đủ dễ để làm, nhưng nếu cụm từ bắt đầu một câu thì chữ “P” phải được viết hoa. Shelley tự hỏi liệu có cách nào, về mặt vĩ mô, để biết liệu một cụm từ chẳng hạn như “với điều kiện là” có ở đầu câu hay không.

Có một số cách bạn có thể làm về điều này. Đầu tiên, bạn có thể sử dụng Tìm và Thay thế để thực hiện các tìm kiếm và thay thế liên tiếp. Macro có thể làm như sau:

  1. Thay đổi tất cả các biến thể của “miễn là” thành chữ thường.

  2. Tìm kiếm “. Với điều kiện là” (dấu chấm, khoảng trắng, “với điều kiện là”) và thay thế bằng “. Với điều kiện là” (viết hoa thích hợp).

  3. Lặp lại tìm kiếm và thay thế ở bước 2 bằng cách sử dụng các dấu câu kết thúc câu khác như dấu chấm than, dấu chấm hỏi hoặc bất kỳ dấu câu nào trong số các dấu câu đó, theo sau là dấu trích dẫn.

Vì điều này đang được thực hiện trong một macro, quá trình sẽ diễn ra rất nhanh chóng.

Đây là một ví dụ về một cái có thể thực hiện công việc:

Sub ChangeCase1()

Dim vFindText As Variant     Dim vReplaceText As Variant     Dim orng As Range     Dim i As Long

vFindText = Array(". provided that", _                       "! provided that", _                       "? provided that", _                       "."" provided that", _                       "!"" provided that", _                       "?"" provided that")

vReplaceText = Array(". Provided that", _                          "! Provided that", _                          "? Provided that", _                          "."" Provided that", _                          "!"" Provided that", _                          "?"" Provided that")



' Set all occurrences to lowercase     Set orng = ActiveDocument.Range     With orng.Find         .ClearFormatting         .Replacement.ClearFormatting         Do While .Execute(FindText:="provided that", _           Forward:=True, _           Wrap:=wdFindStop) = True             orng.Select             orng = "provided that"

orng.Collapse wdCollapseEnd         Loop     End With

' Account for end-of-sentence     For i = 0 To UBound(vFindText)

Set orng = ActiveDocument.Range         With orng.Find             .ClearFormatting             .Replacement.ClearFormatting             Do While .Execute(FindText:=vFindText(i), _               MatchCase:=True, _               Forward:=True, _               Wrap:=wdFindStop) = True                 orng.Select                 orng = vReplaceText(i)

orng.Collapse wdCollapseEnd             Loop         End With     Next End Sub

Một thiếu sót trong cách tiếp cận này là nó không cho phép “miễn là” xuất hiện ở đầu đoạn văn. Macro có thể được sửa đổi để làm cho nó có tính đến những trường hợp như vậy, nhưng nó sẽ phức tạp hơn.

Tuy nhiên, có một cách tiếp cận khác mà bạn có thể sử dụng. Cái này dựa trên một cài đặt khá bí truyền cho thuộc tính Case: wdTitleSentence. Cài đặt này thay đổi tất cả các ký tự (với một ngoại lệ đáng chú ý) thành chữ thường và nếu cụm từ nằm ở đầu câu sẽ thay đổi ký tự đầu tiên thành chữ hoa. Đây là cách bạn có thể sử dụng nó trong macro:

Sub ChangeCase2()

With Selection.Find         .ClearFormatting         .Wrap = wdFindContinue         .Forward = True         .Format = True         .MatchCase = False         .MatchWildcards = False         .Text = "provided that"

.Execute         While .Found             Selection.Range.Case = wdLowerCase             Selection.Range.Case = wdTitleSentence             Selection.Collapse Direction:=wdCollapseEnd             .Execute         Wend     End With End Sub

Lưu ý rằng trong vòng lặp While có hai phép gán cho thuộc tính Case. Đầu tiên đặt lựa chọn (những gì được tìm thấy) thành chữ thường và thứ hai đặt nó thành chữ hoa đầu đề cho một câu. Cài đặt chữ thường được tạo cụ thể để xử lý “một ngoại lệ đáng chú ý”

Tôi đã đề cập — nếu văn bản “CUNG CẤP điều đó” ở đầu câu, cài đặt wdTitleSentence, vì một số lý do, sẽ không thay đổi thành “Đã cung cấp điều đó”. Tuy nhiên, nó sẽ thay đổi “với điều kiện là” (mà “ĐÃ CUNG CẤP điều đó” trở thành sau khi đặt thành chữ thường) thành “Đã cung cấp điều đó” mà không có vấn đề gì.

_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 (13398) áp dụng cho Microsoft Word 2007, 2010 và 2013.