Denise đang phát triển một macro và cô ấy cần kiểm tra xem điểm chèn có nằm trong dấu trang hay không. Cô ấy cần biết điều này vì nếu điểm chèn nằm trong dấu trang, cô ấy cần có mã sửa đổi dấu trang; nếu nó không có trong dấu trang, thì mã của cô ấy cần tạo một mã.

Về lý thuyết, quá trình này khá đơn giản. Tất cả những gì bạn cần làm là kiểm tra xem có bao nhiêu dấu trang trong lựa chọn, theo cách này:

If Selection.Bookmarks.Count > 0 Then     ' Inside a bookmark End If

Điều này hoạt động cho dù vùng chọn là một dải văn bản hay vùng chọn được thu gọn thành chỉ điểm chèn. Tuy nhiên, có một vài “gotchas” tiềm năng cần phải lưu ý. Đầu tiên là nếu điểm chèn nằm ngay bên trái của dấu trang (chỉ cần chạm vào phần đầu của dấu trang), thuộc tính Count sẽ vẫn lớn hơn 0. Điều này là do Vùng chọn được xác định bởi điểm chèn thu gọn là được coi là bao gồm ký tự ngay bên phải của điểm chèn.

Điều thứ hai cần lưu ý là nếu lựa chọn của bạn bị thu gọn, bạn không thể dựa vào thuộc tính Count là 0 hoặc 1. Thật vậy, nó có thể nhiều hơn 1 vì có thể các dấu trang “chồng chéo”

và do đó, để điểm chèn nằm trong nhiều hơn một dấu trang đồng thời. Do đó, bạn có thể cần mã của mình để kiểm tra xem điểm chèn nằm trong dấu trang nào. Cách dễ nhất để làm điều này là kiểm tra thuộc tính Tên của các dấu trang, theo cách này:

Dim bFoundIt As Boolean Dim J As Integer

bFoundIt = False Selection.Collapse If Selection.Bookmarks.Count > 0 Then     ' Inside a bookmark     For J = 1 To Selection.Bookmarks.Count         If Selection.Bookmarks(J).Name = "DesiredName" Then             bFoundIt = True         End If     Next J End If

Khi mã này được thực thi, bFoundIt sẽ chỉ True nếu điểm chèn nằm trong dấu trang mong muốn. Cũng cần lưu ý, việc bao gồm lệnh thu gọn vùng chọn để đảm bảo nó thực sự nằm trong một điểm chèn chứ không phải một dải văn bản đã chọn.

Một “gotcha” tiềm năng thứ ba là Word thực sự sử dụng dấu trang bên trong cho nhiều mục đích. Ví dụ, nó sử dụng chúng để xác định phạm vi in, nhưng đó không phải là nơi duy nhất. Tuy nhiên, dấu trang do hệ thống xác định có thể được phát hiện vì chúng luôn bắt đầu bằng dấu gạch dưới. Mặc dù đây không phải là vấn đề trong mã nói trên (vì bạn đang tìm kiếm một dấu trang cụ thể với một tên cụ thể), nhưng sẽ là một vấn đề tiềm ẩn nếu mã của bạn đang tìm kiếm bất kỳ dấu trang nào. Đoạn mã sau, được viết dưới dạng một hàm có thể gọi, có thể hữu ích trong tình huống như vậy.

Function InBookmark() As Boolean     ' Returns True if the insertion point is inside     ' any non-system bookmark. Also collapses the     ' selection to an insertion point

Dim bFoundIt As Boolean     Dim J As Integer

bFoundIt = False     Selection.Collapse

For J = 1 To Selection.Bookmarks.Count         If Left(Selection.Bookmarks(J).Name) <> "_" Then             bFoundIt = True         End If     Next J

InBookmark = bFoundIt End Function

Để sử dụng chức năng này từ bên trong macro của bạn, bạn có thể sử dụng một cái gì đó đơn giản như sau:

If Not InBookmark Then     ' create new bookmark End If

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