Word элемент управления содержимым vba
Чтобы дать указания макросу для выполнения действий со сложными условиями, необходимо создание экранных форм, так как обычных диалогов уже не хватает. Точнее, придется выводить множество запросов, что явно не отвечает требованиям эргономики интерфейса. Они ничем не отличаются от любых диалогов во всех программах, кроме возможности добавления управляющих элементов.
Но! Вспомните, сколько раз вам приходилось выискивать нужный пункт в диалоге или пытаться осознать, о чем вас спрашивают? Учтите это при разработке собственных форм. Правила создания диалогов крайне просты: всё запрошено, но сделано это кратко и понятными словами.
Использование форм достаточно сложно и вошло в основной курс изучения только в 2021 году. Более подробно, чем изложено здесь, это будет обсуждаться только с профильными группами или в элективном курсе.
Создание формы
Форма должна быть сохранена в каком-либо проекте (project): шаблоне или документе.
Перейдем в окно VBE нажатием горячей клавиши Alt+F11 . Сразу ещё раз акцентирую ваше внимание на том, что редактор написан на английском языке, хотя используется русская версия Word!
Щелчком правой клавишей мыши в любом месте перечня объектов проекта (выберем текущий документ) в окне Project Explorer (в левом верхнем углу) вызовем контекстное меню, через которое и происходит добавление формы.
Будет создана категория Forms, в которой разместится новая форма, получающая название по умолчанию UserForm1. Появится инструментальная панель Toolbox, содержащая элементы управления для вставки в форму.
Сама форма активизируется, то есть появится рамка с точками выделения, за которые (белые) можно изменять размеры, что мы и сделаем для удобства вывода на сайт. Впоследствии к активации окна формы приведет щелчок мышью на свободном месте или заголовке.
Щелкнем на ней правой кнопкой мыши и выберем пункт контекстного меню Properties (Свойства), в результате чего откроется окно под списком проектов. (Если оно не было открыто ранее.)
Всего свойств 34, но обсуждаться они пока будут только по необходимости.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Разберем подробно каждый элемент, так как именно на них основано всё программирование форм.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Теперь создадим аналогичную команду для кнопки Cancel, пойдя наиболее сложным путем, чтобы проиллюстрировать, как создаются программы для методов, не формируемые автоматически.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Сотрем лишние пустые программы, которые скорее всего создались во время ваших экспериментов и отредактируем нужную нам. Чтобы понять, как, необходимо определить, какой из двух возможных способов обработки формы вы будете использовать.
Способ 1. Все необходимые действия производятся в процедурах нажатия кнопок, после чего форма скрывается (Hide) или уничтожается (Unload). Вариант является очевидным и стандартным, но не всегда приемлемым.
Способ 2. Форма скрывается (Hide), после чего происходит обработка из вызвавшей форму программы. Вариант требует дополнительных усилий, но именно он понадобится для подавляющего большинства случаев.
Разберем их реализацию по порядку.
Выполнения действий из формы
Наверно, этот вопрос является ключевым для написания начальных программ с задействованием формы.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Во-вторых, вместо MsgBox нужно ввести код, нужный для данного случая.
В-третьих, If. Else хватило только потому, что выбираем один вариант из двух. Иначе потребуется более сложная конструкция.
Выполнения действий в вызвавшей процедуре
Такой способ будет наиболее эффективен, если форму придется открывать много раз
Первый вопрос, который возникает, касается того, какая же кнопка была нажата для закрытия формы: подтверждение или отказ.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
В данном случае использован объектный метод
Заметьте, команда скрывает форму, а не удаляет ее. В результате можно программно обратиться к отдельным элементам и изучить, что они содержат. То есть проанализировать выбор и/или ввод пользователя.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Все приведенные комментарии для предыдущего способа, действительны и здесь.
Побочный эффект будет заключаться в том, что все изменения, произведенные в форме, сохранятся при ее повторном показе. С этим придется либо бороться, либо, наоборот, удастся воспользоваться.
Для более сложных диалогов можно создавать кнопки, изменяющие настройки других элементов. В качестве классического примера можно привести кнопку, восстанавливающую значения по умолчанию.
Примеры форм
Диалог обратной связи интеллектуальной системы выделения авторов в списке литературы. Производит анализ текста и расширение/уменьшение выделения справа и слева в зависимости от нажатой кнопки диалога.
Работа со списком научных журналов (3792 штуки). Доступно добавление, удаление, редактирование. Накапливается информация о вариантах написания и правильном сокращенном написании, включая его версии в разные периоды.
Элемент системы проверки списков литературы, позволяющий выявлять некоторые часто встречающиеся проблемы библиографических списков с безошибочной эффективностью на 5–10 порядков выше, чем у профессионального редактора.
Объекты управления и методы
Ниже приведены основные объекты, связанные с формами, и перечислены их методы (не свойства!). Найти даже эту информацию достаточно сложно. Так что, не обессудьте, обсуждаться они пока не будут.
Восклицательным знаком обозначены методы, создаваемые автоматически при двойном щелчке на элементе управления.
Методы UserForm
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Методы Label
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Методы SpinButton
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Методы CommandButton
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Методы TextBox
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Проверка введенных данных
Для начала хочется отметить, что многие программисты либо совсем игнорируют подобное действие, либо доводят его до абсурда, вводя пользователей в бешенство. Учтите эти две крайности и постарайтесь их избежать. Лучшим помощником в этом будет многократное испытание на собственной шкуре.
Это действие разумнее всего производить в самой форме, не загромождая программу.
Прежде чем погружаться в реализацию, надо разобраться, какие варианты проверки и/или ограничений можно использовать.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Для того, чтобы помочь пользователю, можно заранее запрограммировать наиболее часто используемые варианты, оставив и для него возможность ввести нечто отличное. Для этих целей можно использовать комбинированный список или радиокнопки, дополненные полем ввода.
Обращение к форме из программы
Это уже обсуждено в примерах, но, все же, уточним еще раз.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
В пределах модуля программного кода самой формы, такой префикс не требуется.
Удаление формы из памяти
Производится командой (инструкцией):
После выгрузки объекта, он полностью удаляется из памяти, освобождая ее. Но обращение к нему также становится невозможным.
Элементы управления формы
Обсудим все элементы, которые вынесены на панель Toolbox и могут быть использованы в форме на примере Office 2019. (Задействованные выше скриншоты относились к Word 2003, работа элементов которого комментироваться не будет, хотя отличия и есть.)
Для получения названия элемента нужно навести на него курсор мыши.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Общие замечания, свойства и настройки
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Label (надпись)
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
TextBox (поле ввода текста)
Элемент, необходимый для ручного ввода значения пользователем. В упрощенном понимании, заменяет InputBox.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
CommandButton
Командная кнопка — самый стандартный активный элемент, нажатие которого в норме производит запуск программы.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
TabStrip
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
MultiPage
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
ScrollBar
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
SpinButton
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Image (картинка)
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Порядок обхода элементов формы (Tab Order)
Создание формы однозначно относится к творческому виду работ. Отсюда вытекает определенный неизбежный «хаос» в процессе вставки и размещения управляющих элементов. Оставление их в таком виде, как есть, безусловно следует считать недопустимой неряшливостью.
Никакая часть сайта не может быть воспроизведена никаким способом без письменного разрешения правообладателя и явной ссылки на данный ресурс.
Элементы управления контентом — это связанные и, возможно, помеченные фрагменты документа, выполняющие роль контейнеров для определенных типов содержимого. В отдельных элементах управления содержимым могут находиться такие элементы, как даты, списки или абзацы форматированного текста. В некоторых случаях элементы управления контентом могут напоминать вам о формах. Однако они гораздо более мощные, гибкие и полезные, так как позволяют создавать насыщенные структурированные блоки контента. Элементы управления контентом позволяют автору шаблонов, которые вставляют в документы четко определенные блоки. Элементы управления контентом позволяют:
Укажите структурированные регионы в шаблоне. Каждый структурированный регион имеет свой уникальный ID, чтобы вы могли читать и писать в него. Примерами типов структурированных областей (или элементов управления контентом) являются комбо-поля, изображения, текстовые блоки и календари.
Определите поведение элементов управления контентом. Каждый контроль контента занимает часть документа, и в качестве автора шаблона можно указать, что делает каждый регион. Например, если вы хотите, чтобы область шаблона была календарем, в эту область документа вставляется управление контентом календаря, которое автоматически определяет, что делает этот блок контента. Аналогично, если вы хотите, чтобы раздел шаблона отображал изображение, создайте управление контентом изображения в этой области. Таким образом можно создать шаблон с заранее заранее заданной блокировкой типов.
Ограничить возможность изменения элементов управления контентом в документе. Каждый контроль контента можно ограничить, чтобы он не удалялся или не редактировался. Это полезно, если, например, в шаблоне есть сведения об авторских правах, которые пользователь должен уметь читать, но не изменять. Или, в качестве другого примера, вы также можете заблокировать управление контентом, помещенное в документ шаблона, чтобы пользователь случайно не удалял контент, содержащийся в контроле контента. Это делает шаблоны более надежными, чем в предыдущих версиях.
Составить карту содержимого управления контентом с данными в настраиваемой части XML. Например, если в ячейки таблицы цен на акции вставить элементы элементов простого текстового контента, можно составить карту элементов управления контентом в ячейках таблицы с узлами в XML-файле, которые содержат текущие цены на акции. При изменении цен надстройка может программным образом обновить присоединенный XML-файл, привязанный к каждому обычному контролю текстового контента, и новые обновленные цены автоматически отображаются в таблице.
Самый простой способ создания управления контентом — это пользовательский интерфейс (хотя вы также можете создавать его программным образом). Чтобы создать элемент управления контентом с помощью пользовательского интерфейса (пользовательского интерфейса), выберите контент, который необходимо превратить в элемент управления контентом (например, текст или изображение), а затем выберите нужный тип управления контентом из раздела управления контентом ленты разработчика. Это создает управление контентом вокруг выбранного контента.
Управление контентом в объектной модели Word
В следующей таблице показаны объекты в объектной модели Word, которые относятся к средствам управления контентом.
Имя | Описание |
---|---|
ContentControl | Каждый объект ContentControl представляет отдельный контроль контента в документе. Используйте коллекцию ContentControls для доступа к отдельным объектам ContentControl. |
ContentControls | Для доступа к коллекции элементов управления контентом можно использовать свойства ContentControls объектов Document, Range и Selection. Вы также можете использовать метод SelectContentControlsByTitle и метод SelectContentControlsByTag объекта Document для доступа к коллекции ContentControls, которая включает определенные элементы управления контентом, которые имеют одно и то же название или значение тегов. |
ContentControlListEntry | Если элемент управления контентом представляет собой выпадаемую или комбо-коробку, объект ContentControlListEntry представляет отдельные элементы в списке. |
ContentControlListEntries | Используйте свойство DropdownListEntries объекта ContentControl, чтобы получить доступ ко всем пунктам в отдельном выпадаемом списке или в поле комбо. |
Каждый из этих объектов или коллекций имеет методы и свойства, которые позволяют работать с управлением контентом как по отдельности, так и в качестве коллекции. Поскольку существуют различные типы элементов управления контентом (см. следующий раздел "Типы элементов управления контентом"), объект ContentControl имеет элементы, которые могут не применяться к различным типам элементов управления контентом. В следующей таблице показаны свойства и методы объекта ContentControl, применимые только к определенным типам элементов управления контентом.
Полный список всех свойств и методов объекта ContentControl см. в материалах Content Controls.
Свойство/метод | Группа ресурсов |
---|---|
Свойство BuildingBlockCategory | Элементы управления контентом BuildingBlock Gallery (wdContentControlBuildingBlockGallery) |
Свойство BuildingBlockType | Элементы управления контентом BuildingBlock Gallery (wdContentControlBuildingBlockGallery) |
Свойство DateDisplayFormat | Элементы управления контентом даты (wdContentControlDate) |
Свойство DateDisplayLocale | Элементы управления контентом даты (wdContentControlDate) |
Свойство DateStorageFormat | Элементы управления контентом даты (wdContentControlDate) |
Свойство DropdownListEntries | Элементы управления контентом со списком комбо и выпадаемого списка (wdContentControlComboBox и wdContentControlDropdownList) |
Свойство MultiLine | Элементы управления текстовым контентом (wdContentControlText) |
Метод ungroup | Элементы управления групповым контентом (wdContentControlGroup) |
Метод SetCheckedSymbol | Управление контентом check Box (wdContentControlCheckBox) |
Метод SetUncheckedSymbol | Управление контентом check Box (wdContentControlCheckBox) |
Типы элементов управления контентом
Существует восемь различных типов элементов управления контентом, которые можно добавить в документ, каждый из которых представлен в новом переоценке WdContentControlType.
Тип управления контентом | Описание | Константа WdContentControlType |
---|---|---|
Почтовый ящик. | wdContentControlCheckBox | |
Календарь | Выбор времени даты. | wdContentControlDate |
Стандартный блок | Позволяет пользователю выбирать из указанных блоков. | wdContentControlBuildingBlockGallery |
раскрывающийся список; | Выпадаю список. | wdContentControlDropDownList |
Group | Определяет защищенный регион документа, который пользователи не могут изменить или удалить. Элемент группового управления может содержать любые элементы документа, такие как текст, таблицы, графика и другие элементы управления контентом. | wdContentControlGroup |
поле со списком; | Комбо-поле. | wdContentControlComboBox |
Изображение | Изображение. | wdContentControlBlockPicture |
форматированный текст; | Блок богатого текста. | wdContentControlRichText |
обычный текст; | Блок простого текста. | wdContentControlText |
События управления контентом
Помимо свойств и методов, доступных с объектной моделью управления контентом в Word, вы также можете использовать несколько событий, которые позволяют запускать код при добавлении или удалении управления контентом или при редактировании пользователем управления контентом. В следующем списке описывается каждое из событий и время работы кода события. Все эти события являются участниками объекта Document.
Имя события | Описание |
---|---|
ContentControlAfterAdd | Возникает после добавления нового управления контентом в документ. Это событие выполняется независимо от того, добавляет ли пользователь управление контентом с помощью средств пользовательского интерфейса или добавляет их с помощью кода. |
ContentControlBeforeContentUpdate | Происходит до того, как Word обновит содержимое в области управления контентом. |
ContentControlBeforeDelete | Происходит до удаления пользователем управления контентом. Это событие выполняется независимо от того, удаляет ли пользователь управление контентом с помощью средств пользовательского интерфейса или удаляет их с помощью кода. |
ContentControlBeforeStoreUpdate | Происходит до обновления Word содержимого управления контентом из данных в хранилище данных документа. |
ContentControlOnEnter | Возникает при вводе пользователем данных в элемент управления контентом. |
ContentControlOnExit | Возникает, когда пользователь выходит из управления контентом. |
Работа с Кодом
Если вы хотите добавить элемент управления контентом, удалить элемент управления контентом или получить доступ и управлять существующими средствами управления контентом, вы можете сделать это с помощью кода. В следующих разделах приводится несколько примеров того, что можно сделать.
Добавление управления контентом
Как упоминалось ранее, в документах можно добавить восемь различных типов элементов управления контентом. Чтобы добавить в документ управление контентом, используйте метод Add из коллекции ContentControls. В следующем примере выбор даты добавляется в активный документ и задает значение даты к текущей дате.
Вы можете использовать ту же основную конструкцию, чтобы добавить любой из различных типов элементов управления контентом в документ.
Добавление заголовка в управление контентом
Используйте свойство Title, чтобы добавить название в управление контентом. Это текст, который видят пользователи, и он может помочь им узнать, какой тип данных необходимо ввести в управление контентом. В следующем примере к активному документу добавляется новое управление текстовым контентом и заголовок или текст отображения для управления.
Изменение текста-задатки на управление контентом
Текст placeholder — это временный текст. Это может быть простое описание одного или двух слов (аналогично названию) или более подробное описание (например, про номерные шаги). Изменение текста-задатки является одинаковым независимо от типа управления контентом или ожидаемого содержимого управления контентом. В следующем примере в активный документ добавляется отпадной список, задайте текст заполнителям для управления, а затем заполните список именами нескольких животных.
Это лишь некоторые из способов использования объектной модели для управления средствами управления контентом в документах. Дополнительные примеры см. в разделе How To.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Отдельный контроль контента. Элементы управления контентом — это связанные и, возможно, помеченные фрагменты документа, выполняющие роль контейнеров для определенных типов содержимого. Отдельные элементы управления контентом могут содержать такие содержимого, как даты, списки или абзацы форматного текста. Объект ContentControl входит в коллекцию ContentControls.
Примечания
Чтобы создать управление контентом, используйте метод Add коллекции ContentControls. Чтобы указать тип управления контентом, используйте параметр Type метода Add. В следующем примере создайте новый элемент управления контентом списка и добавите в список несколько элементов.
Используйте свойство Type, чтобы изменить управление контентом на другой тип управления контентом. Например, возможно, вам нужно изменить с управления датами на текстовый. Однако вы не сможете изменить все элементы управления контентом на другой тип; некоторые могут не разрешить изменять их тип. Кроме того, в зависимости от содержимого управления контентом изменить тип не удастся. Например, если управление контентом, которое необходимо изменить, не позволяет типу контента, который находится в существующем содержимого, попытка изменить тип запрещена и создает ошибку во время работы.
В следующем примере вставляется управление контентом даты и устанавливается значение управления, а затем изменяется управление текстовым контентом.
Используйте метод SetPlaceholderText, чтобы изменить текст задатки со строки по умолчанию на что-то более подходящее для управления. Чтобы указать текст заголовка для управления, используйте свойство Title. Это отображает выше управления, когда курсор находится внутри управления или указатель мыши находится над управлением.
В зависимости от типа управления контентом вы не сможете использовать все свойства и методы объекта ContentControl.
Не все свойства управления контентом применяются к различным типам элементов управления контентом. В следующей таблице перечислены свойства, применимые к типам элементов управления контентом.
Свойство/метод | Группа ресурсов |
---|---|
Свойство BuildingBlockCategory | Элементы управления контентом BuildingBlock Gallery (wdContentControlBuildingBlockGallery) |
Свойство BuildingBlockType | Элементы управления контентом BuildingBlock Gallery (wdContentControlBuildingBlockGallery) |
Свойство DateDisplayFormat | Элементы управления контентом даты (wdContentControlDate) |
Свойство DateDisplayLocale | Элементы управления контентом даты (wdContentControlDate) |
Свойство DateStorageFormat | Элементы управления контентом даты (wdContentControlDate) |
Свойство DropdownListEntries | Элементы управления контентом в поле комбо и выпадаемом списке (wdContentControlComboBox и wdContentControlDropdownList) |
Свойство MultiLine | Элементы управления текстовым контентом (wdContentControlText) |
Метод ungroup | Элементы управления групповым контентом (wdContentControlGroup) |
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Существует документ (Word 2003) состоящий из одного листа. Данный лист имеет подложку-картинку (бланк для заполнения). На листе создано множество элементов управления (ЭУ - Label), которые заполняются или очищаются в результате работы макроса. При открытии документа создается меню с двумя командами: 1 - заполнить бланк, 2 - очистить. Первая команда вызывает форму, через которую собственно и происходит перенос данных на элементы управления листа.
Как обратиться к семейству всех ЭУ, чтобы в цикле выполнить их очистку.
зы: плохо знаком с моделью текстового редактора, в электронной таблице я делал так:
Помощь в написании контрольных, курсовых и дипломных работ здесь
Элементы управления на листе Excel меняются
Очень прошу помочь с решением следующей проблемы: На листе Excel два листбокса, в которых на.
Расположите на рабочем листе элементы управления
Расположить на рабочем листе элементы управления как показано на рисунке. Список заполнить.
Элементы управления формы на защищённом листе
Коллеги, доброго времени суток! Вопрос в следующем - делаю "калькулятор", в котором суммируемые.
Элементы управления и внешний вид документа
Добрый день. Возникла такая проблема: на поле документа Word 2007 накидал несколько элементов.
Меня интересует следующее: как обратится у элементу управления по индексу.
А ты уверен, что знаешь индексы?
Офис назначает их сам
Добавлено через 1 минуту
Второй скрин - это часть формы, в которую вносятся данные, а по кнопке "Добавить" переносятся на лист текстового документа. Здесь же не вернисаж!!
А как ты обращаешься к лабелам? в этом случае? Вот как раз в случае с текстовым редакторам я не знаю как к ним обратится. Как обращался в электронной таблице я написал в первом посте, но теперь возникла необходимость реализовать в текстовом редакторе. С Word-ом думал будет аналогично, а оказалось - не всё так просто.
Если на бланке 600 меток - сделай бланк таблицей и обращайся с ней как с таблицей.
Добавлено через 2 минуты
Кусок из моей проги(для примера)
И если хочешь обратиться к конкретному объекту надо знать его индекс или имя
Я понял. Вся проблема состоит в том, что данные, которые вводит пользователь нужно разбивать на блоки (слово на буквы). В этом случае я не знаю, сколько Label мне нужно использовать, то есть мне известно только диапазон заполняемых надписей, например: под имя я использую 34 надписи (допустим Label10-Label43) по букве в каждой, но если имя будет короткое (Иван), то соответственно заполнить нужно только 4.
В электронной таблице я это делал так:
В Excel все созданные элементы управления нумеровались в порядке создания, что позволило мне по индексно к ним обращаться. Я думаю в ворде подход тот же, но вот как правильно это сделать.
В инете гуглил, пока что не нашел. На данном форуме искал, но похожего не нашел, к сожалению.
зы: за реализацию с помощью таблиц спасибо. но вопрос остается открытым. (((
Читайте также: