Excel отличие activex от элементов управления формы

Обновлено: 04.07.2024

Благодаря формам, а также многочисленным элементам управления и объектам, которые можно в них добавить, значительно упрощается ввод данных в листы и улучшается их внешний вид. Вы также можете делать это самостоятельно, и вам почти или совсем не потребуется код Microsoft Visual Basic для приложений (VBA).

Форма листа и шаблон Excel — это не одно и то же. Шаблон — это предварительно отформатированный файл, который служит отправной точкой для создания книги с требуемым оформлением. Форма содержит элементы управления, такие как поля и раскрывающиеся списки, упрощающие ввод и изменение данных для использующих ваш лист. Дополнительные информацию о шаблонах, которые можно скачать, см. в Excel шаблонов.

Общие сведения о формах

Форма (печатная или веб-версия) — это документ со стандартной структурой и форматированием, который упрощает сбор, у упорядочение и редактирование сведений.

Печатаемая форма содержит инструкции, форматирование, наклейки и пустые пробелы для ввода и ввода данных. Для создания печатных Excel и Excel шаблонов.

Веб-формы содержат те же функции, что и печатные формы. Кроме того, веб-формы содержат элементы управления. Элементы управления — это объекты, которые отображают данные или упрощают ввод или изменение данных, выполнение действия или выбор данных. Как правило, элементы управления упрощают работу с формой. Примерами часто используемых элементов управления являются списки, переключатели и кнопки. Элементы управления также могут запускать назначенные им макросы и реагировать на события, например щелчки мышью, путем выполнения кода Visual Basic для приложений (VBA).

Создавать печатные Excel веб-формы можно несколькими способами.

Типы форм Excel

В Excel можно создавать формы нескольких типов: формы данных, листы с элементами управления формы и ActiveX, а также пользовательские формы VBA. Каждый из этих типов формы можно использовать по отдельности или сочетать с другими типами для создания нужного решения.

Форма данных

форма данных предоставляет удобный способ ввода или отображения одной строки данных из диапазона или таблицы, не требующий применения горизонтальной прокрутки. Использовать форму данных может быть проще, чем перемещаться между столбцами, которых слишком много для одновременного отображения на экране. Форму данных можно применять тогда, когда достаточно простой формы с текстовыми полями, в качестве подписей которых используются заголовки столбцов, и когда не требуются сложные или пользовательские возможности, например списки и счетчики.

Excel может автоматически создать встроенную форму данных для диапазон или таблица. Такая форма представляет собой диалоговое окно, в котором все заголовки столбцов отображаются в виде подписей. Каждой подписи соответствует текстовое поле, в которое можно вводить данные для столбца (максимальное количество столбцов — 32). В форме данных можно вводить новые строки, находить строки путем навигации или (на основе содержимого ячейки) обновлять строки и удалять их. Если ячейка содержит формула, ее результат отображается в форме данных, но саму формулу в форме данных изменить нельзя.

Лист с формой и элементами ActiveX

Этот тип формы позволяет вводить и просматривать данные в сетке. Кроме того, на Excel уже встроены некоторые функции, похожие на элементы управления, такие как приметки и проверка данных. Ячейки напоминают текстовые поля, которые можно вводить и форматированием различными способами. Ячейки часто используются в качестве подписей, и благодаря регулировке высоты и ширины ячеек, а также объединению ячеек можно настроить поведение таблицы как простую форму для ввода данных. Другие функции управления, такие как приметки к ячейкам, гиперссылки, фоновые изображения, проверка данных, условное форматирование, внедренные диаграммы и автофайл, могут привести к работе с таблицами как к расширенным формам.

Для большей гибкости вы можете добавлять элементы управления и другие объекты-рисунки полотно на полотно, а также объединять и координировать их с ячейками. Например, с помощью списка можно упростить выбор элементов в списке. Кроме того, можно упростить ввод номера с помощью счетчика.

Элементы управления и объекты хранятся на полотне, и поэтому их можно отображать и просматривать одновременно со связанным текстом, не зависящим от границ строк и столбцов, без изменения макета сетки или таблицы данных на листе. В большинстве случаев многие из этих элементов управления можно также связать с ячейками на листе, а для их нормальной работы не требуется создавать код VBA. Можно задать свойства, определяющие, является ли элемент управления свободно перемещаемым или перемещается и изменяет размеры вместе с ячейкой. Например, может потребоваться, чтобы флажок перемещался вместе со связанной ячейкой при сортировке диапазона. С другой стороны, если нужно, чтобы список всегда отображался в одном и том же месте, нежелательно, чтобы он перемещался вместе с ячейкой.

В Excel поддерживаются два типа элементов управления: элементы управления форм и элементы ActiveX. Кроме этих наборов элементов управления, вы также можете добавлять объекты из средств рисования, такие как автофигуры, объект WordArt, графические элементы SmartArt или текстовые поля.

В следующих разделах более подробно описываются элементы управления и средства рисования, а также работа с ними.

Элементы управления формы

Элементы управления формы появились в Excel раньше всего и поддерживаются в предыдущих выпусках Excel (начиная с версии 5.0). Их также можно использовать на листах макросов XLM.

Элементы управления формы используются, если вы хотите легко ссылаться на данные ячеок и взаимодействовать с ними, не используя код VBA, а также добавлять их на листы диаграмм. Например, после добавления элемента управления "список" на лист и связывания его с ячейкой можно вернуть числовые значения для текущего положения выбранного элемента управления. Затем можно использовать это число в сочетании с функцией ИНДЕКС для выбора различных элементов в списке.

С помощью элементов управления формы можно также выполнять макросы. Можно назначить элементу управления существующий макрос либо создать или записать новый. Когда пользователь формы щелкает элемент управления, запускается макрос.

Однако эти элементы управления невозможно добавить в пользовательские формы, использовать для управления событиями или изменить для запуска веб-сценариев на веб-страницах.

этой теме обсуждает проблему, которую я имел с объектами ActiveX в электронной таблице Excel. Это беспорядок и в конечном счете не имеет связного ответа.

проблема на 100% воспроизводима:

  1. откройте книгу с объектами ActiveX в электронной таблице при использовании док-станции
  2. отключите машину от док-станции, вызвав изменение разрешения (есть и другие причины, моя с док-станцией станция, похоже, изменение разрешения вызывает это)
  3. нажмите элемент управления ActiveX-они немедленно изменяют размер и размер шрифта. Свойство FontSize изменения не функция .Font.Size параметр, но что-то, что не может быть изменено после возникновения проблемы, кроме постоянного увеличения fontsize

единственное, казалось бы, авторитетное решение включает в себя MS patch (это было" исправление " несколько лет назад, хотя, поэтому это не кажется практичным для полного развертывание) и редактирование реестра, что нецелесообразно для моего случая использования.

Я ищу способ либо:

  1. предотвратите это изменение
  2. найти лучшую работу вокруг

отсутствует достоверная информация об этой проблеме в интернете. Я намерен опубликовать свою работу, однако она даже не близка к идеалу, и я бы предпочел лучшее решение.

моя работа заключается в том, чтобы программно перебирать все объекты OLE на листе* и писать код в отладчик, а затем включать кнопку в основном "изменять размер объектов" на листе - с инструкциями о том, почему эта проблема возникает.

этот метод создаст код для управления этой кнопкой.

он не будет автоматически обновляться, однако-это снимок и должен только использоваться непосредственно перед развертыванием приложения (если конечные пользователи будет иметь функциональность кнопки).

  1. выполнить код, сгенерированный следующим методом
  2. сохранить книгу немедленно - это не мешает изменения шрифта от продолжения происходить
  3. открыть книгу и проблема "решена"

* Примечание: это не найдет объекты, которые сгруппированы, к сожалению, либо.

единственным 100% надежным обходным путем является закрытие и перезапуск Excel (включая любые невидимые экземпляры). Любое другое решение имеет некоторые проблемы.

Это одна из причин, почему я избегаю контроль, когда это возможно. См.здесь для примера.

этот модуль был создан dlmille от E-E 20 марта 2011

Это упражнение для хранения параметров управления active-x в книге на основе листа, сохраняя их настройки, если / когда Excel получает "причудливый" и размеры формы идут косо В то время как ListBox имеет свойство IntegralHeight, чей побочный эффект ложного параметра будет удерживать этот элемент управления от косого хода, и в то время как командные кнопки имеют такие свойства, как перемещение/размер ячеек и т. д. другие элементы управления не так изящный.

процедура setControlsOnSheet(): 1) получает 6 общих параметров управления для каждого элемента управления OLEObject (active-x) на активном листе и 2) сохраняет эти параметры в массив строк, sControlSettings () и 3) добавляет / обновляет определенное имя (которое скрыто)с этими настройками.

определенное имя для каждого элемента управления на листе создается на основе активного имени листа и имени элемента управления (которое должно создать уникальный пример)

подобные проблемы существуют для комментариев и фигур. Одним из обходных путей является запись макроса для записи .Ширина и .Высота свойства, а также свойства положения листа каждого объекта на неиспользуемом листе. Затем напишите второй макрос, чтобы восстановить эти свойства по требованию.

У меня было несколько проблем с кнопками, размер шрифта-одно из них. У меня также были кнопки изменения размера и изображения в них изменения размера. Я мог бы программно изменить размер кнопки назад, но не мог найти способ изменить размер изображения таким образом. Я думаю, что нашел то, что может быть окончательным решением этих проблем.

Если я удалю MSForms.файл exd из (в моем случае) C:\Users\AppData\Local\Temp\Excel8.0 пока вы находитесь в разрешении экрана, вы хотите вид кнопок и перезапустите Excel, эти проблемы исчезают. Есть и другие .ехд файлы необходимо удалить для других приложений. Некоторые из них:

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

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

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

Я не уверен, что свойство размещения на самом деле часть проблемы, но, чтобы быть уверенным, я использую 2 решения:

(1) размещение установлено в 3

(2) моя функция" автоматического изменения размера", которая запускается с помощью Workbook_WindowActivate событие увеличивает размер кнопки и шрифта немного, прежде чем уменьшить их до того, что они должны. Но, возможно, решения (1) будет достаточно. У меня сейчас нет времени проверять. Вот код для моего Workbook_Activate событие:

теперь все работает нормально. Мне потребовалось некоторое время в прошлом, чтобы найти решение в сети. Надеюсь, это поможет хотя бы одному человеку ;-)

Я думаю, что у @ RuiHonori был лучший ответ, но для того, чтобы я получил свои элементы управления на всех моих листах туда, где я хотел, чтобы они были - которые все оказались одинакового размера - я использовал это:

из других форумов я узнал, что это связано с обновлением MS и что хорошее исправление-просто удалить файл MSForms.exd из любой подпапки Temp в профиле пользователя. Например:

конечно, приложение (Excel, Word. ) должен быть закрыт для удаления этого файла.

вот лучший ответ, который я нашел в блоге группы поддержки Microsoft Excel

  1. на полностью обновленной машине и после удаления .exd файлы, откройте файл в Excel с правами редактирования.

    открыть Visual Basic для приложений > изменить проект, добавив комментарий или редактирование в любой модуль кода > отладка > компиляция Виде vbaproject.

    сохранить и снова открыть файл. Тест на разрешение. Если решение принято, предоставьте этот обновленный проект дополнительные пользователи.

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

Он был KB2553154. Microsoft необходимо выпустить исправление. Как разработчик приложений Excel мы не можем перейти на все компьютеры наших клиентов и удалить файлы с них. Нас обвиняют в том, что Microsoft вызвала.

Я разработчик Excel, и я определенно почувствовал боль, когда это произошло. К счастью, мне удалось найти обходной путь, переименовав MSForms.файлы exd в VBA даже когда Excel работает, который также может устранить проблему. Разработчики Excel, который нужно распространять свои электронные таблицы можете добавить следующий код VBA в свои таблицы, чтобы сделать их невосприимчивыми к обновление МС.

поместите этот код в любом модуле.

подпрограмма RenameMSFormsFiles пытается переименуйте MSForms.exd файлы в C:\Users\[user.name]\AppData\Local\Temp\Excel8.0\ и C:\Users\[user.name]\AppData\Local\Temp\VBE\ папки в MSForms-копировать.exd.

затем вызовите подпрограмму RenameMSFormsFiles в самом начале события Workbook_Open.

электронная таблица попытается переименовать MSForms.exd файлы, когда он откроется. Очевидно, что это не идеальное решение:

  1. пострадавший пользователь по-прежнему будет испытывать ошибки управления ActiveX при запуске кода VBA при первом открытии электронная таблица. Только после выполнения кода VBA один раз и перезапуска Excel проблема устранена. Обычно, когда пользователь сталкивается со сломанной электронной таблицей, реакция коленного рывка-закрыть Excel и попытаться снова открыть электронную таблицу. :)
  2. В MSForms.файлы exd переименовываются каждый раз, когда открывается электронная таблица, даже если нет проблем с MSForms.файлы с расширением EXD. Но электронная таблица будет работать просто отлично.

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

я опубликовал это решение здесь.

С Windows 8.1 я не смог найти .exd файлы с помощью поиска windows. С другой стороны, команда cmd dir *.exd /S нашел один файл в моей системе.

советы в КБ и выше не работает для меня. Я обнаружил, что если один пользователь Excel 2007 (с обновлением безопасности или без него; не уверен в точных обстоятельствах, которые вызывают это) сохраняет файл, возвращается исходная ошибка.

в моем случае я не могу обновить / обновить всех пользователей моего файла Excel в разных местах. Поскольку проблема возвращается после того, как некоторые пользователи сохраняют файл Excel, мне придется заменить элемент управления ActiveX чем-то другим.

упрощенные инструкции для конечных пользователей. Не стесняйтесь копировать / вставлять следующее.

  1. закройте все программы и файлы Office.
  2. откройте Проводник Windows и введите %TEMP% в адресную строку, затем нажмите Enter. Это приведет вас в системную временную папку.
  3. найдите и удалите следующие папки: Excel8.0, VBE, Word8.0
  4. теперь попробуйте снова использовать свой файл, он не должно быть никаких проблем.

возможно, вам придется подождать, пока проблема не возникнет, чтобы это исправление работало. Применение его преждевременно (до установки Центра Обновления Windows в вашей системе) не поможет.

лучший источник информации и обновлений по этому вопросу, который я мог найти, находится в блогах TechNet " блог группы поддержки Microsoft Excel (Как уже упоминалось):

в марте 2015 года было выпущено исправление в дополнение к автоматическому исправлению и ручным инструкциям, и он также доступен в Центре обновления Windows.

статус: обновление 10 марта 2015:

исправления этой проблемы были выпущены в марте 2015 г. обновления для Office 2007, 2010 & 2013.

Общая информация о проблеме:

руководство и дополнительные решения:

сценарии решения:

поскольку эта проблема может затронуть несколько компьютеров, также можно создать решение для сценариев для удаления файлов EXD и запустить сценарий как часть процесса входа в систему с помощью политики. Сценарий, который вам понадобится, должен содержать следующие строки и должен быть запущен для каждого пользователя как.файлы exd являются пользовательскими специфический.

  1. на полностью обновленной машине и после удаления .exd файлы, откройте файл в Excel с правами редактирования.

  2. открыть Visual Basic для приложений > изменить проект, добавив комментарий или редактирование в любой модуль кода > Отладка > Компиляция VBAProject.

  3. сохранить и снова открыть файл. Тест на разрешение.

Я, наконец, нашел этот ответ на официальном Microsoft KB:

нет новой информации здесь, чем то, что мы имеем в предыдущих ответах, но, по крайней мере, он признает, что Microsoft знает о проблеме.

Я знаю, что многие ответы уже были опубликованы для этого, но ни один ответ независимо не работал для моего сайта. Итак, вот что сработало для меня:

Шаг 1: Удалите следующие обновления-KB2920789, KB2920790, KB2920792, KB2920793, KB2984942, KB2596927

Шаг 2: скрыть эти обновления, чтобы они не были установлены при последующих перезагрузках

Шаг 3: удалить папку Excel8.0 из C:\Users\\AppData\Local\Temp

Шаг 4: Перезагрузите workstatiion (я также хотел бы убедиться, что вышеупомянутый KBs не был непреднамеренно применен)

Я хочу дать ответ, который работал только для меня (я понимаю, что я может быть только один-либо). У меня был один макрос, который я вызывал с помощью ленты. Он имел следующий код:

Я не знал, что он выдает ошибку, поэтому я был озадачен и попробовал все здесь. Кнопка просто перестала работать, и я не мог заставить ее работать. Когда я заметил ошибку и исправил ее:

Он снова начал работать. Абсолютно странно если вы спросите меня, но, возможно, это поможет кому-то, кто был в таком же отчаянии, как и я.

Какая разница между элементами управления формами и элементами управления ActiveX? Какой из них я должен использовать?

0vdDK.jpg

Некоторые примеры кода, которые я нахожу в Интернете, работают с моими элементами управления, а другие - нет. Как так?

Как я могу работать с каждым типом, и как я могу сказать разницу?

Существует [вечная] путаница, окружающая два типа элементов управления, доступных для Excel, - усугубляется контрастной терминологией, используемой различными онлайн-источниками.

Это всего лишь общий обзор различий между элементами управления форматом и элементами управления ActiveX (на основе моих старых заметок, которые помогли мне, наконец, разобраться в различиях!) Посетите приведенные ссылки для получения более подробной информации о каждом элементе управления, включая код и примеры проектов. ☺

Существует два типа элементов управления: элементы управления форматом и элементы управления ActiveX:

Оба типа элементов управления могут использоваться на листах, но для пользовательских форм могут использоваться только элементы управления ActiveX.

*<code>worksheet</code>* **<code>.</code> <code>Shapes("</code>** *<code>controlname</code>* **<code>")</code>**

Элементы управления формой являются частью коллекции Shapes (так же, как Drawing Objects) и, таким образом, называются:

*<code>worksheet</code>* **<code>.</code>** *<code>controlname</code>*

Элементы ActiveX в основном являются частью рабочего листа и поэтому называются:

Оба типа элементов управления могут быть созданы, изменены и удалены либо с рабочего листа, либо программно с помощью VBA, однако два типа элементов управления имеют слегка изменяющийся синтаксис при использовании VBA для их ссылки.

На некоторых сайтах также обсуждается форма данных. Это не что иное, как пользовательская форма, специально предназначенная для ввода/обработки данных, поэтому было бы разумнее назвать их (более знакомое звучание) "Userform Userform".

Офисная документация также иногда ссылается на рабочий лист как форму. Хотя это технически правильно, не позволяйте этому путать вас. Подумайте, что слово "форма" используется в общем смысле:

dictionary image: form

Контроль формы

Элементы управления ActiveX

Оба выглядят, ведут себя и контролируются одинаково, но не одинаково. (Перечислите здесь.)

Например, сопоставьте два типа Combo Boxes. В некоторых языках программирования сопоставимые элементы управления называются "раскрывающимся меню" или "раскрывающимся списком". В Excel у нас есть " Form Control Combo Box " и " ActiveX Control Combo Box ":

compare control types

(Нажмите, чтобы увеличить.)

"Имя по умолчанию" применяется к элементам управления, созданным вручную.Элементы управления, созданные программно, не имеют (или требуют) имени по умолчанию и поэтому должны иметь один присваиваемый сразу после создания.

differences between controls

Доступность управления

На этом изображении показано, какие общие элементы управления обычно доступны для использования в рабочих листах и пользовательских формах.

chart of controls

Другие факторы могут повлиять на доступность контроля.

  • Элемент управления ActiveX реализуется как сервер в процессе (обычно это небольшой объект), который может использоваться в любом контейнере OLE. Обратите внимание, что полная функциональность элемента управления ActiveX доступна только при использовании в контейнере OLE, предназначенном для управления элементами ActiveX.

  • Этот тип контейнера, называемый контейнером управления или объектом управления, может управлять элементом ActiveX с использованием свойств и методов управления и получать уведомления из элемента управления ActiveX в виде событий. На следующем рисунке показано это взаимодействие:

    (Источник: это и это)

Смотрите также:

Кнопки выбора (кнопки радио)

В Excel два типа переключателей на самом деле называются опциональными кнопками. Чтобы еще больше запутать вопросы:

по умолчанию для OptionButton1 управления формой является OptionButton1 .

имя по умолчанию для элемента управления ActiveX - Option Button 1 .

Хороший способ отличить их - открыть список свойств управления (на ленте на вкладке "Разработка" или щелкнуть правой кнопкой мыши элемент управления и выбрать " Properties или нажать F4 ), поскольку элемент управления ActiveX имеет еще много параметров, которые более простой контроль формы.

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

Выберите элемент управления групповым полем, а затем удерживайте Ctrl , выбирая каждый из других элементов управления, которые вы хотите сгруппировать. Щелкните правой кнопкой мыши элемент управления групповым полем и выберите Grouping → Group .

Первые две ссылки ниже представляют собой отдельные наборы инструкций для обработки каждого типа кнопки выбора.

События управления формой (только событие Click )

События управления формой могут реагировать только на одно событие: событие Click . (Подробнее см. Здесь.) Обратите внимание, что этот раздел не применяется к пользовательским формам, поскольку они используют только элементы управления ActiveX.

Чтобы добавить процедуру для события Click :

Щелкните правой кнопкой мыши элемент управления и выберите Assign Macro.

В диалоговом окне "Назначить макрос":

Выберите существующую процедуру и нажмите OK , или,

Создайте новую процедуру в VBE, нажав New. или,

Запишите новый макрос, нажав Record. или,

Чтобы удалить назначенное событие, удалите его имя из поля " Macro Name и нажмите OK .

assign events

(Нажмите, чтобы увеличить.)

Чтобы переименовать, отредактировать или удалить существующие макросы, нажмите Alt + F8 , чтобы открыть интерфейс Macro :

Macros dialog

События управления ActiveX

Элементы управления ActiveX имеют более обширный список событий, на которые они могут быть настроены для ответа.

Чтобы назначить события элементам ActiveX, щелкните правой кнопкой мыши элемент управления и выберите " View Code . В VBE вы можете вставить код или выбрать определенные события из раскрывающегося списка в правом верхнем углу окна VBE.

activeX events

(Нажмите, чтобы увеличить.)

Управление обработкой событий в пользовательской форме:

События также могут использоваться в элементах управления пользовательскими формами. Поскольку только элементы управления ActiveX могут быть размещены в пользовательской форме, у вас будет компромисс "больше кодирования и больше функциональности".

Элементы ActiveX добавляются к пользовательским формам так же, как они добавляются в рабочий лист. Имейте в виду, что любые события, назначенные самой пользовательской форме (то есть, фон), будут "заблокированы" в любых областях, покрываемых элементом управления, поэтому вам может потребоваться присвоить те же события элементам управления, а также пользовательской форме.

Например, чтобы заставить этот пользовательский форму реагировать на MouseMove любом месте формы, тот же код события был применен к пользовательской форме, текстовым полям, кнопкам выбора и рамке:

Читайте также: