Дениз разрабатывает макрос, и ей нужно проверить, находится ли точка вставки внутри закладки. Ей нужно знать это, потому что, если точка вставки находится в закладке, ей нужно, чтобы код изменил закладку; если его нет в закладке, то ее код должен создать ее.

Теоретически процесс довольно простой. Все, что вам нужно сделать, это проверить, сколько закладок есть в выделенном фрагменте, следующим образом:

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

Это работает независимо от того, является ли выделение диапазоном текста или выделение свернуто только до точки вставки. Однако есть пара потенциальных «ловушек», о которых следует помнить. Во-первых, если точка вставки находится непосредственно слева от закладки (просто касаясь начала закладки), свойство Count все равно будет больше 0. Это связано с тем, что Selection, который определяется свернутой точкой вставки, равен считается, что он включает символ справа от точки вставки.

Второе, о чем следует помнить, это то, что если ваш выбор свернут, вы не можете полагаться на то, что свойство Count будет равно 0 или 1. В самом деле, оно может быть больше 1, потому что закладки могут «перекрываться»

и, следовательно, точка вставки должна находиться более чем в одной закладке одновременно. Поэтому вам может понадобиться ваш код, чтобы проверить, в каких закладках находится точка вставки. Самый простой способ сделать это — проверить свойство Name закладок следующим образом:

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

Когда этот код выполняется, bFoundIt будет иметь значение True, только если точка вставки находится внутри желаемой закладки. Также обратите внимание на включение команды свертывания выделения, чтобы убедиться, что он действительно находится в точке вставки, а не в диапазоне выделенного текста.

Третья потенциальная проблема заключается в том, что Word фактически использует закладки для многих целей. Например, он использует их для определения диапазонов печати, но это не единственное место. Однако системные закладки можно обнаружить, поскольку они всегда начинаются с подчеркивания. Хотя в приведенном выше коде это не будет проблемой (поскольку вы специально ищете закладку с определенным именем), это может быть потенциальной проблемой, если ваш код ищет любую закладку. Следующий код, написанный как вызываемая функция, может быть полезен в такой ситуации.

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

Чтобы использовать эту функцию из вашего макроса, вы можете использовать что-нибудь очень простое:

If Not InBookmark Then     ' create new bookmark End If

_Примечание: _

Если вы хотите знать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах WordTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / wordribbon-WordTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

WordTips — ваш источник экономичного обучения работе с Microsoft Word.

(Microsoft Word — самая популярная программа для обработки текстов в мире.) Этот совет (6905) относится к Microsoft Word 2007, 2010, 2013 и 2016.