трюки • приёмы • решения
В наших статьях мы подробно рассмотрим практические примеры, связанные с использованием программирования, которое заложено в Microsoft Office. Оно основывается на языке VBA, название которого в полном виде выглядит так Visual Basic for Application. Учитывая, что все рассматриваемые разработки будут использовать VBA, наша первоочередная задача познакомиться сданным языком.
Примеры этой темы предназначены для категории читателей, которая либо с VBA не встречалась, либо это знакомство было весьма поверхностным. Все последующие главы будут полностью посвящены рассмотрению практических офисных задач, и, таким образом, эта статья является для них базовой.

Рис. 1.4. Закладка Основные окна Параметры Excel
Предполагается, что читатель хотя бы в незначительной степени знаком с чисто пользовательскими возможностями Microsoft Excel прошлых версий. Важно отметить, что наибольший эффект будет наблюдаться, если запустить Microsoft Excel параллельно с чтением наших статей и выполнять все описанные разработки на компьютере. При рассмотрении примеров на протяжении всего изучения нам понадобятся элементы ActiveX, которые по-другому можно назвать Элементы управления.
И в качестве первого шага необходимо в окне, показанном на рис. 1.2, щелкнуть кнопкой Параметры Excel. В результате перед вами откроется новое окно с набором закладок. Здесь на закладке Основные следует сделать установку для отображения на ленте вкладки Разработчик, что реализуется с помощью флажка Показывать вкладку «Разработчик» на ленте (рис. 1.4).
В Microsoft Excel элементы ActiveX можно размещать и на пользовательских формах, и на самих рабочих листах (на верхнем графическом слое, где располагаются рисунки, диаграммы и другие объекты). Часто вставка нескольких элементов ActiveX значительно упрощает работу с данными на рабочем листе. Все элементы управления делятся на две группы: элементы управления формами и элементы управления ActiveX. Оба набора элементов управления имеют свои преимущества и недостатки. В общем случае элементы управления формами проще в применении, но зато элементы ActiveX являются более гибкими. В наших примерах мы будем использовать исключительно элементы ActiveX.
В результате окно приложения Microsoft Excel дополнится новыми пиктограммами, которые нам потребуются в дальнейшем (рис. 1.5). Среди тех, которыми мы будем активно пользоваться на протяжении всей книги, отметим пиктограмму с надписью Вставить. С се помощью на рабочем листе можно размещать элементы ActiveX, которые существенно дополняют функциональность книг Microsoft Excel. Они типичны для различных приложений Windows (речь идет о кнопках, полосах прокрутки, текстовых окнах, переключателях, списках и т. д.). Кроме пиктограммы Вставить мы будем активно пользоваться и другими присутствующими на ленте Режим конструктора, Свойства, Visual Basic и Макросы.
Перед тем как начать какие-либо действия с тем или иным элементом ActiveX, его необходимо поместить на рабочий лист. Это легко выполнить, если воспользоваться пиктограммой Вставить. На рис. 1.6 показано размещение на рабочем листе элемента ActiveX Кнопка.

Рис. 1.5. Отображение вкладки Разработчик на ленте
При наведении курсора мыши на пиктограмму элемента ActiveX Кнопка в качестве подсказки появляется еще один вариант его названия: элемент управления «Кнопка». Далее по тексту мы будем использовать оба варианта названия — элементы ActiveX и элементы управления.
Для того чтобы перенести элемент ActiveX на рабочий лист, необходимо щелкнуть на панели инструментов на его пиктограмме левой кнопкой мыши и далее переместить курсор мыши на рабочий лист. Курсор мыши примет вид, аналогичный математическому знаку «плюс». Теперь следует нажать левую кнопку мыши и, не отпуская ее, переместить мышь вправо и вниз, а затем отпустить ее левую кнопку. В результате на рабочем листе мы увидим изображение появившегося элемента ActiveX, окруженного маркерами (рис. 1.6).

Рис. 1.6. Размещение кнопки на рабочем листе в режиме конструктора
После размещения элемента ActiveX на рабочем листе активизируется кнопка Режим конструктора, которая позволяет пользователю далее работать в одном из двух режимов. Один из них так и называется режим конструктора. В этом случае можно работать с элементами ActiveX для создания необходимого интерфейса на рабочем листе. Также в этом режиме пользователю предоставляется возможность создавать программные разработки.
Появление маркеров (см. рис. 1.6), окружающих элемент ActiveX, как раз и является признаком того, что мы работаем в режиме конструктора (кнопка Режим конструктора в этом случае выглядит нажатой). На начальном этапе создания разработки работа в режиме конструктора сводится к размещению элементов управления на рабочем листе и изменению их свойств. Далее производится программирование различных событий, связанных с элементами управления, листами и книгой в целом.
Важно отметить, что после размещения элемента ActiveX на рабочем листе, в нашей книге (можно даже сказать — на данном листе книги) появился новый элемент, который фактически представляет собой «программный» объект. Аналогичным образом на рабочих листах книг Excel можно размещать и другие элементы ActiveX.

Рис. 1.7. Вид рабочего листа при выходе из режима конструктора
Другой режим можно назвать режимом выполнения или режимом работы (какого-то однозначно принятого названия не существует). Чтобы перейти в этот режим (то есть выйти из режима конструктора), необходимо отжать кнопку Режим конструктора (рис. 1.7). После этого в нашем случае можно просто пощелкать кнопкой, которую мы создали на рабочем листе (функциональные действия, которые можно обеспечить в этом случае, мы рассмотрим в дальнейшем). Далее опять вернемся в режим конструктора. С помощью маркеров, окружающих кнопку, можно легко изменить се размеры. Также с помощью мыши можно перемещать созданную кнопку по рабочему листу.
В этом разделе описываются конкретные сведения об использовании элементов управления ActiveX на листах и листах диаграмм. This topic covers specific information about using ActiveX controls on worksheets and chart sheets. Общие сведения о добавлении и работе с элементами управления представлены в разделе Использование элементов управления ActiveX в документе и Создание настраиваемого диалогового окна. For general information on adding and working with controls, see Using ActiveX Controls on a Document and Creating a Custom Dialog Box.
При работе с элементами управления на листах учитывайте следующие моменты. Keep the following points in mind when you are working with controls on sheets:
В дополнение к стандартным свойствам, доступным для элементов управления ActiveX, с элементами управления ActiveX в Microsoft Excel можно использовать следующие свойства: боттомригхтцелл, линкедцелл, листфиллранже, Размещение, Принтобжект, Топлефтцелл и ZOrder. In addition to the standard properties available for ActiveX controls, the following properties can be used with ActiveX controls in Microsoft Excel: BottomRightCell, LinkedCell, ListFillRange, Placement, PrintObject, TopLeftCell, and ZOrder.
Эти свойства можно задать и вернуть с помощью имени элемента управления ActiveX. These properties can be set and returned using the ActiveX control name. В приведенном ниже примере показано, как прокрутить окно книги, чтобы CommandButton1 в левом верхнем углу. The following example scrolls the workbook window so CommandButton1 is in the upper-left corner.
Некоторые методы и свойства Microsoft Excel Visual Basic отключены при активации элемента управления ActiveX. Some Microsoft Excel Visual Basic methods and properties are disabled when an ActiveX control is activated. Например, нельзя использовать метод Sort , если элемент управления активен, поэтому следующий код завершается с ошибкой в процедуре обработки события нажатия кнопки (так как элемент управления остается активным после того, как пользователь щелкнет его). For example, the Sort method cannot be used when a control is active, so the following code fails in a button click event procedure (because the control is still active after the user clicks it).
Чтобы обойти эту проблему, активируйте другой элемент на листе, прежде чем использовать свойство или метод, который завершился ошибкой. You can work around this problem by activating some other element on the sheet before you use the property or method that failed. Например, следующий код сортирует диапазон: For example, the following code sorts the range:
Элементы управления в книге Microsoft Excel, внедренной в документ в другом приложении, не будут работать, если пользователь дважды щелкает книгу, чтобы изменить ее. Controls on a Microsoft Excel workbook embedded in a document in another application will not work if the user double-clicks the workbook to edit it. Элементы управления будут работать, если пользователь щелкнет книгу правой кнопкой мыши и выбрал команду Открыть в контекстном меню. The controls will work if the user right-clicks the workbook and selects the Open command from the shortcut menu.
При сохранении книги Microsoft Excel в формате файла книги Microsoft Excel 5.0/95 теряются данные элементов управления ActiveX. When a Microsoft Excel workbook is saved using the Microsoft Excel 5.0/95 Workbook file format, ActiveX control information is lost.
Ключевое слово Me в процедуре обработки события для элемента управления ActiveX на листе относится к листу, а не к элементу управления. The Me keyword in an event procedure for an ActiveX control on a sheet refers to the sheet, not to the control.
Содержание
- Добавление элементов управления с помощью Visual Basic Adding Controls with Visual Basic
- Использование свойств элемента управления в Visual Basic Using Control Properties with Visual Basic
- Использование имен элементов управления в коллекциях Shapes и OLEObjects Using Control Names with the Shapes and OLEObjects Collections
Добавление элементов управления с помощью Visual Basic Adding Controls with Visual Basic
В Microsoft Excel элементы управления ActiveX представлены объектами OLEObject в коллекции OLEObjects (все объекты OLEObject также входят в коллекцию Shapes) **** . In Microsoft Excel, ActiveX controls are represented by OLEObject objects in the OLEObjects collection (all OLEObject objects are also in the Shapes collection). Чтобы программно добавить элемент управления ActiveX на лист, используйте метод Add коллекции OLEObjects . To programmatically add an ActiveX control to a sheet, use the Add method of the OLEObjects collection. В примере ниже показано, как добавить кнопку на лист 1. The following example adds a command button to worksheet 1.
Использование свойств элемента управления в Visual Basic Using Control Properties with Visual Basic
Чаще всего код Visual Basic будет ссылаться на элементы управления ActiveX по имени. Most often, your Visual Basic code will refer to ActiveX controls by name. В следующем примере изменяется название элемента управления с именем "CommandButton1". The following example changes the caption on the control named "CommandButton1."
Обратите внимание, что при использовании имени элемента управления не из модуля класса для листа, содержащего элемент управления, необходимо уточнить имя элемента управления с помощью имени листа. Note that when you use a control name outside the class module for the sheet containing the control, you must qualify the control name with the sheet name.
Чтобы изменить имя элемента управления, используемого в коде Visual Basic, выберите элемент управления и задайте свойство (имя) в окне Свойства. To change the control name you use in Visual Basic code, select the control and set the (Name) property in the Properties window.
Так как элементы управления ActiveX также представлены объектами OLEObject в коллекции OLEObjects , можно задавать свойства элементов управления с помощью объектов в коллекции. Because ActiveX controls are also represented by OLEObject objects in the OLEObjects collection, you can set control properties using the objects in the collection. В приведенном ниже примере задается левое положение элемента управления с именем "CommandButton1". The following example sets the left position of the control named "CommandButton1."
Свойства элемента управления, которые не отображаются как свойства объекта OLEObject , можно задать, возвращая фактический объект элемента управления с помощью свойства Object . Control properties that are not shown as properties of the OLEObject object can be set by returning the actual control object using the Object property. В приведенном ниже примере задается заголовок для CommandButton1. The following example sets the caption for CommandButton1.
Так как все объекты OLE также являются членами коллекции Shapes , вы можете использовать эту коллекцию, чтобы задать свойства для нескольких элементов управления. Because all OLE objects are also members of the Shapes collection, you can use the collection to set properties for several controls. В приведенном ниже примере показано выравнивание левого края всех элементов управления на листе 1. The following example aligns the left edge of all controls on worksheet 1.
Использование имен элементов управления в коллекциях Shapes и OLEObjects Using Control Names with the Shapes and OLEObjects Collections
У элемента управления ActiveX на листе есть два имени: имя фигуры, содержащей элемент управления, которое отображается в поле имя при просмотре листа, и имя кода для элемента управления, которое отображается в ячейке справа от поля (имя) в свойстве. "s". An ActiveX control on a sheet has two names: the name of the shape that contains the control, which you can see in the Name box when you view the sheet, and the code name for the control, which you can see in the cell to the right of (Name) in the Properties window. При первом добавлении элемента управления на лист имя фигуры и имя кода совпадают. When you first add a control to a sheet, the shape name and code name match. Тем не менее, если вы измените имя фигуры или имя кода, другое автоматически не изменится на "совпадают". However, if you change either the shape name or code name, the other is not automatically changed to match.
Имя кода элемента управления можно использовать в именах процедур обработки событий. You use the code name of a control in the names of its event procedures. Однако при возврате элемента управления из коллекции Shapes или OLEObjects для листа необходимо использовать имя фигуры, а не имя кода, для ссылки на элемент управления по имени. However, when you return a control from the Shapes or OLEObjects collection for a sheet, you must use the shape name, not the code name, to refer to the control by name. Например, предположим, что на лист добавляется флажок, а для имени фигуры по умолчанию и имени кода по умолчанию задано значение CheckBox1. For example, assume that you add a check box to a sheet and that both the default shape name and the default code name are CheckBox1. Если затем изменить имя кода элемента управления, введя чкфинишед Next to (Name) в окне Свойства, необходимо использовать чкфинишед в именах процедур обработки событий, но по-прежнему необходимо использовать CheckBox1 для возврата элемента управления из фигур или ** Коллекция OLEObject** , как показано в следующем примере. If you then change the control code name by typing chkFinished next to (Name) in the Properties window, you must use chkFinished in event procedure names, but you still have to use CheckBox1 to return the control from the Shapes or OLEObject collection, as shown in the following example.
Поддержка и обратная связь Support and feedback
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Элементы ActiveX можно использовать на формах листа (без кода VBA или с ним), а также на пользовательских формах VBA. Их рекомендуется применять, если требуются более гибкие возможности, чем у элементов управления формы. Многочисленные свойства элементов ActiveX позволяют настраивать их внешний вид, поведение, шрифты и другие характеристики.
Можно также управлять событиями, которые происходят при взаимодействии с элементом ActiveX. Например, можно выполнять различные действия в зависимости от того, какой элемент выбирается из списка, или отправлять запрос базе данных для заполнения поля со списком элементами при нажатии кнопки. Можно также создавать макросы, которые реагируют на события, связанные с элементами ActiveX. При выборе элемента управления будет выполняться код VBA, обрабатывающий все назначенные ему события.
На компьютере находятся многочисленные элементы ActiveX, установленные приложением Excel и другими программами, такими как Calendar Control 12.0 и проигрыватель Windows Media.
Важно. Не все элементы ActiveX можно использовать непосредственно на листах; некоторые из них можно применять только в пользовательских формах Visual Basic для приложений (VBA). При попытке добавить такие элементы управления на лист приложение Excel отображает сообщение "Вставка объекта неосуществима".
Тем не менее элементы ActiveX невозможно добавить на листы диаграмм (с помощью пользовательского интерфейса) или на листы макросов XLM. Кроме того, невозможно назначить макрос, который будет выполняться непосредственно элементом ActiveX, как для элемента управления формы.
Обзор элементов ActiveX
| Изображение | Название | Пример | Описание |
|---|---|---|---|
![]() | Флажок | Включает или отключает значение, что соответствует выбору противоположных действий. На листе или в группе можно одновременно установить несколько флажков. Флажок может иметь одно из трех состояний: установлен (значение включено), снят (значение отключено) и смешенное состояние, то есть сочетание состояний "включено" и "отключено" (если поддерживается выбор нескольких элементов). | |
![]() | Текстовое поле | Представляет собой прямоугольник, в котором можно просматривать, вводить и изменять текст или данные, связанные с ячейкой. Текстовое поле также может быть статическим и содержать данные, предназначенные только для чтения. | |
![]() | Кнопка | Запуск макроса, который выполняет действие при нажатии кнопки. | |
![]() | Переключатель | Позволяет выбрать одно из ограниченного набора взаимоисключающих значений. Переключатели обычно находятся в группе или рамке. Переключатель может иметь одно из трех состояний: установлен (значение включено), снят (значение отключено) и смешенное состояние, то есть сочетание состояний "включено" и "отключено" (если поддерживается выбор нескольких элементов). | |
![]() | Список | ||
![]() | Поле со списком | Представляет собой сочетание текстового поля и раскрывающегося списка. Поле со списком компактнее обычного списка, однако чтобы отобразить список элементов, пользователь должен щелкнуть стрелку вниз. Поле со списком следует использовать, когда требуется обеспечить возможность ввода элементов в список и выбора из него одного элемента. В этом элементе управления отображается текущее значение независимо от того, каким образом оно было введено. | |
![]() | Выключатель | Указывает на состояние (да/нет) или режим (вкл./вкл.). При нажатии кнопки она меняет свое состояние на противоположное. | |
![]() | Счетчик | Позволяет увеличивать и уменьшать значение, например числовое значение, время или дату. Чтобы увеличить значение, щелкните стрелку вверх, чтобы уменьшить — стрелку вниз. Как правило, пользователь также может вводить текст в связанную ячейку или текстовое поле. | |
![]() | Полоса прокрутки | Используется для прокрутки диапазона значений с помощью кнопок со стрелками или путем перетаскивания ползунка полосы прокрутки. Можно перемещаться по странице значений (с заранее заданным интервалом), щелкая область между ползунком и одной из кнопок со стрелками для прокрутки. Как правило, пользователь также может вводить текст непосредственно в связанную ячейку или текстовое поле. | |
![]() | Подпись | Указывает назначение ячейки или текстового поля либо содержит описание (заголовки, подписи, рисунки) или краткие инструкции. | |
![]() | Изображение | Выводит изображение, например точечный рисунок , JPEG или GIF . | |
![]() | Рамка |

















