Excel vba подсказки к toolbar


Excel VBA: как превратить код в полноценный инструмент на панели инструментов?

Это любительский час здесь, дома, и я мог бы воспользоваться помощью.

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

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

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

Как я начну выполнять такую задачу? Ваш вклад очень ценится!

Excel vba подсказки к toolbar

Дополнено, частично изменено by Acidigital

Содержание

Если Ваш макро интенсивно что-то отображает на экране (например в цикле выделает ячейки, вставляет данные, etc.) Вы можете увеличить скорость работы макро выключив обновление экрана: Application.ScreenUpdating = False. В этом письме есть также советы как писать макро так чтобы они работали побыстрее. Грабли при использовании ScreenUpdating в функциях в Excel 97

Это зависит от настроек Excel в меню Сервис/ Параметры/ Модуль/ РазделительСписков. Для извлечения текущих значений используйте свойство Application.International. Можно определить десятичный разделитель, разделитель тысяч и пр. Как определить есть ли комментарии на рабочем листе

Как узнать есть ли хоть один Notes (комментарий) в рабочем листе, кроме как перебором по всем ячейкам? . Без этого не работает.

В Excel’97 эта проблема может быть решена вот как: Как защитить лист от пользователя, но не от макро

На листе модулей открытой рабочей книги присутствует процедура, которая копирует некий лист из другой (не активной) рабочей книги. В этом листе в некоторых ячейках находятся определенные пользователем формулы. Процедура работает без проблем.
Из workbook, содержащей эту процедуру, я делаю надстройку (.xla) и подключаю ее к Excel 95. При вызове вышеописанной процедуры она выдает сообщение:
Run time error 424 object required
Kак можно избежать этого сообщения?

Попробуйте заменить ссылки типа ActiveWorkbook.WorkSheets(«.. на ссылки вида ThisWorkBook.WorkSheets(«..

Дело в том, что когда выполняется код надстройки, активной книгой в Excel’е является не сама надстройка! Конструкция ThisWorkbook позволяет сослаться на книгу, в которой в настоящий момент выполняется код Excel VBA. Примечание: Это общий принцип создание надстроек Excel. Как вычислить формулу в макро

Если у Вас есть строка с формулой, Вы можете вычислить ее при помощи функции VBA Evaluate. Как определить использованную область листа
Как определить пересечение областей

Использованную часть рабочего листа можно определить через свойство Worksheet.UsedRange. Для определения пересечения областей можно использовать метод Application.Intersect(). Если Вам надо определить какие ячейки нужной Вам области заняты данными (например пользователь выделил целый столбец, определив пересение столбца и UsedRange можно сократить число анализируемых ячеек).

Но это работает не совсем верно. Дело в том что Excel запоминает максимальный размер UsedRange, и после удаления строк / столбцов уменьшения UsedRange не происходит. Заставить пересчитать UsedRange можно записав и открыв заново файл. А это не есть рулез. Кое-кто имеет свои макросы для определения реального «UsedRange». Еще более правильные макросы можно найти на Unofficial Excel Page, в разделе Spreadsheet Techniques , Getting the real UsedRange. Использование именнованной области в качестве базы данных

Использование именнованных областей является стандартной практикой при работе в Excel. Вы можете использовать их например как таблицы базы данных. Вы можете обращаться к ним в функциях рабочего листа оперирующих с массивами — такими как ВПР(), ИНДЕКС(), ПОИСКПОЗ() и пр. Имена также можно применять в элементах управления. Например в ListBox. В дальнейшем при изменении размеров области (например при добавлении новой строки в БД руками) Excel автоматически отследит это изменение и Вам не надо будет писать код для изменения соответствующих атрибутов ListBox. Имена — это мощный инструмент в Excel . Через имена очень удобно осуществлять связь с данными на рабочем листе, которыми манипулирует пользователь. Это например может быть некоторая форма пользовательского ввода. Вас интересуют только значения в определенных полях формы, но не ее внешний вид и прочие «красивости». При использовании имен вы можете «отдать на откуп» пользователю (или дизайнеру этой формы) ее внешний вид, не ограничивать пользователя в перемещению по форме с использованием стандартных навигационных средств Excel.

Можно даже говорить о новом стиле программирования в Excel (назовем его инструментальный стиль — instrumental style :) пользователь получает значительно большую степень свободы чем в стандартном классическом варианте который Вы можете наблюдать при обычном программировании. Воспринимайте Excel как среду в которой работает пользователь, и Ваша программа должна не заменять эту среду а являтся ее расширением, предоставляя пользователю дополнительные возможности. Тем самым Вы не противопоставляете свою программу Excel (и пользователю) а являетесь продолжением Excel и «садитесь на его конек».

Примеры использования Instrumental Style Вы можете увидеть в моей программе (программа ? мне кажется это название уже не очень подходит для продуктов такого рода) печати платежного поручения . И еще более интересный в этом плане вариант для учета времени работы консультантов с клиентами. Так как сам файл не содержит документации вкратце опишу его здесь: Каждый консультанты работают с книгой Excel, в которой находится:

  1. Лист формы, заполняемый консультатом при совершении акта консультации клиента :)
  2. Лист реестра всех работ проделанных консультантом
  3. Лист реестра работ по конкретному клиенту всех консультантов

При нажатии на кнопку «Сохранить» происходят некоторые действия :) Поведение программы при этом полностью определяется именами ячеек:

  1. Происходит проверка на непустые значения (имена «nonempty»)
  2. Проверка наличия баз куда будут копироваться записи (одна форма может вставлять записи в несколько таблиц). Используются имена «bd_name»
  3. Копирование данных из полей формы на листы баз. Данные вставляются в столбцы базы в соотвествии с именами «bd_scol».
  4. Листы баз представляют собой некоторым образом «отчеты», имеющие заголовок , тело и footer (не знаю как это будет по русски). записи добавляются в «тело», при этом для форматирования вставляемой записи используется скрытая область «OneRow». Копирование производится в область листа начало которой помечено как «StartDB».
  5. Лист формы переходит в «архивное» состояние, для чего ему присваивается уникальное имя (содержимое именнованных ячеек «name»). Лист покрывается защитой от изменений. Из листа формы вычищаются все имена для «облегчения» книги (зачем хранить ненужную информацию).
  6. Последние использованные данные сохраняются в «невидимых» именах для их последующего дефолтного вставления в новый шаблон формы.

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

Файлы примера находится здесь.. Эти шаблоны должны быть брошены в каталог шаблонов офиса. Для начала работы создайте книгу из шаблона ConsultantBook.xlt

Да, так о чем это я ? По поводу имен — при изменении размеров базы (именнованной области) из макро хорошо использовать метод Resize : Этот фрагмент увеличивает область «YourBase» на 1 строку. Поистине Excel неисчерпаем .

Еще один hintпо поводу использования именнованных областей в качестве базы данных. Макро для отслеживания появления новых данных в диаграммах

Этот файлсодержит код на VBA для отслеживания изменений в диаграммах. Макрос просматривает не появились ли новые строки данных для диаграмм. Если да, то расширяет диаграмму для включения новых данных. Если данные были убраны то соотвественно уменьшает серии в дианграмме. Диаграмма может быть также перестроена через Paste — выделите новый диапазон данных и бросте его на диаграмму. Можете записать макрос и посмотреть код. Как вызывать функции рабочего листа из VBA

Как правило их можно вызывать в виде rez=Application.FuncName(), где FuncName — имя функции (например sin()). В Excel 8 используется специальный объект WorksheetFunction. Я же вызываю их через RUN(«FuncName». ). Так как в VBA надо указывать анклийское наименование функции, а на рабочем листе используются русские названия то очень полезным бывает файл funcs.xls, содержащий таблицу соотвествия имен. Располагается как правило в каталоге \Excel. Как получить список файлов в каталоге

Для этого существует функция VBA dir. Если Вас неудовлетворяет скорость ее работы на больших каталогах можно попробовать использовать функцию ДОС dir, обрабатывая файл с результатами ее работы. Почему Excel не печатает из окна диалога

Функции Print и PrintPriview не работают при открытом пользовательском окне диалога. Как установить фокус ввода в окне диалога

Для этого существует свойство объекта типа Dialog.Focus=»Название». Можно также изменить направление обхода элементов. Как дождаться завершения программы запущенной функцией Shell()

Функции Shell запускает указанное приложение не дожидаясь его завершения (асинхронно). Для проверки завершения запущенного приложения можно использовать оператор AppActivate. Формулы, вставленные из VBA, нерасчитываются при вставке. Их приходится пересчитывать. Что делать ?
Макрос для пересчета ячеек только выделенной области

Приходится делать F2, Enter :-) Некоторые додумались использовать «замену». Это конечно не решает проблему, но все-таки . Я лично использую специальный макрос который апдейтит выделенное, выполняя для каждой ячейки метод Calculate: Этот макрос полезен и тем что он показывает текущую пересчитываемую ячейку. Это нагляднее чем прогресс-бар в строке состояния при пересчете ячеек Excel’om. Я использую этот макрос в основном в книгах где выключен пересчет ячеек (там где много долгоиграющих формул). Иногда у Excel «съезжает крыша» и он начинает пересчитывать ячейки при любом изменении данных на листе. Приходится вырубыть автоматический пересчет ячеек (меню Сервис-Параметры-Вычисления-В ручную). И пользоваться этим макросом для пересчета того что надо.

Как показала практика, если этот макрос не работает — (не пересчитывает ячейки или пишет нечто вроде #знач), то у Вас обнаружена циклическая ссылка и Excel «не хочет» пересчитывать значения. Ищите ссылку и уберите ее. Существуют специальные утилиты для поиска циклических ссылок, можете воспользоваться ими (ищите на авторских страницах, я видел кажется кажется у Stephen Bullen)

По поводу невставляемости формул из в VBA — я _очень_ думаю что это результат наличия циклических ссылок. Потому что в нормальном случае все работает. Как передать диапазон в функцию VBA ?

В функции VBA параметр должен быть объявлен как Variant, тогда на вход функции будет передан объект типа Range . Один способ установить add-in не используя Excel

Ваша программа может бросить XLS файл в директорию автозагрузки Excel (там где живут разные personal.xls). А этот файл уже может сделать все что хочешь, например установить дополнение средствами VBA и подтереть себя . Хитро? Как вставить свое изображение для кнопки в toolbar

Для этого у объекта ToolbarButton есть метод PasteFace. Доступ к Excel через OLE из Visual Basic

Смотри пример Андрея Кириенко — запуск из Visual Basic Excel’a и создания в нем рабочей книги. Доступ к Access из Excel

Вот фрагмент кода, который создаёт таблицу «BalanceShifr» базе данных MS Access: Примечание: Не забудьте выставить в Excel ссылки на объекты DAO!
В редакторе Visual Basic Tools/References/Available References/
[x] MicroSoft DAO . Library Доступ к Access из Excel через ini-файлы

API для для взаимодействия Access и Excel’a через ini-файлы имени Emil Sildos. Собственно mLIni.bas файл здесь. Управление Excel’om через DDE

Есть утилита для управления EXCEL из командной строки (или командного файла) через DDE. Команды можно записать в текстовом файле и выполнить его. Команды DDE соответствуют макро языку Excel 4 и из них нельзя вернуть значения. Но лучше использовать OLE, если это возможно. Как организовать Прогресс-Бар

При длительной работе макро хочется как-то (желательно красивее) отобразить ход процесса — прогресс бар. Штатных средств в Excel для этого нет, поэтому каждый извращается как может ;). Вот несколько образцов:

  • Прогресс бар Владимира Канна
  • Целый набор прогрес-баров на любой вкус , для Excel 5-7 (ну и для XL 8 я думаю тоже).
  • В примитивном случае можно выводить сообщение в Status Line

Как избежать сообщений Excel при удалении листов и т.п.

При выполнении тех или иных действий Excel может запрашивать подтверждения. Например при удалении листа, закрытии файла с несохраненными данными и (!) при проведении операции для которой Excel’y нехватает памяти для Undo. Для подавления этих сообщений используйте Application.DisplayAlerts: Любопытный ход- можно сказать Excel что файл якобы сохранен и тогда он не станет возражать против его закрытия. Назначение макро на горячую клавишу

Для это используется метод Application.OnKeys. Насколько мне известно такоим образом можно «сбросить» стандартные назначения клавиш, переопределив их на свой (пустой) макрос.

Найти последнюю запись в электронной таблице можно из VB следующим способом: Как отменить выделение диапазона ячеек ?

После прекращения работы макроса диапазон остается выделенным. Как это выделение убрать? Можно попробовать следующее: Фокус ввода попадёт после этого на первую ячейку ранее выделенного диапазона. Вообще, решение состоит в прермещении выделения на какую-либо ячейку.
Маленькой хитростью является выделение скрытой ячейки :) Удаление листов в зависимости от даты.

Вот кодфункции на Excel VBA, который решает данную проблему. Подавление «горячих» клавиш.

Как подавить доступ по «горячим» клавишам, имеется ввиду предопределенные в Excel клавиши типа Ctrl-O и т.д.? Попробуйте. Подсказки к Toolbar

Как сделать к «само нарисованным» кнопочкам на Toolbar’е подсказки? (Ну, те, что после 2-х секунд молчания мышки появляются)
Вот так: (в Excel’97 VBA)
Примечание: На VBA для Excel’95 это делается несколько иначе! Как определить адрес активной ячейки

Как в макросе узнать и использовать текущее положение курсора (не мышиного, естественно)?

Очень просто:
ActiveCell.Row и ActiveCell.Column покажут координаты активной ячейки. Подсказки к Toolbar (Excel’95)

Как сделать свой собственный Toolbar с tooltip’ами на кнопках в Excel’95?

Вот фрагмент кодадля Excel’95, который создаёт toolbar с одной кнопкой с пользовательским tooltiр’ом. Нажатие кнопки приводит к выполнению макроса NothingToDo()
Нint: В Excel’97 этот код тоже работает! Запуск Excel с поиском ячейки

Как запустить Excel, чтобы оказаться на ячейке содержимое которой известно заранее?

Можно Вот так.
Достаточно выполнить этот код из макроса Auto_Oрen()!
Примечание: Протестировано и отлажено в Excel’97. Как задать имя листу, который будет вставлен ?

Хочy через Excel VBA задать имя листу, который будет вставлен. Но у команды Sheets.Add нет такого параметра! Как бороться ?

Можно решить проблему следующим способом.
Примечание: Отлажено и протестировано в Excel’97. Как обратиться к ячейке по ее имени ?

Как обратиться к ячейки по ее имени? Т.е. есть Лист1 и в нем ячейки с именем Дебет и Кредит. Хочy подсчитать Дебет-Кредит средствами Excel VBA. Попробовал Range(Дебет)-Range(Кредит), ругается, что не описаны переменные.

Если я правильно понял, нужно разыменовать ячейку из кода Excel VBA. Вот фрагмент кода, который решаеттакую задачу:
Примечание: Отлажено и протестировано в Excel’97.

ПРОГРАММИРОВАНИЕ ПАНЕЛИ ИНСТРУМЕНТОВ VBA

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

Объект CommandBar и семейство CommandBars

Объект CommandBar и семейство CommandBars используются для программирования строк меню и панелей инструментов. В семействе CommandBars хранятся все строки меню и панели инструментов конкретного приложения.

Семейство CommandBars содержится в объекте Application. Оно представляет собой панели команд. В свою очередь каждый объект CommandBar содержит семейство commandBarControls, состоящее из всех элементов управления данной панели инструментов. Свойство controls объекта CommandBar возвращает семейство CommandBarControls. Элементы семейства CommandBarControis относятся к одному из трех типов.

CommandBar But ton

Кнопка или элемент меню, вызывающий выполнение команды или подпрограммы

Сложно организованные меню, такие как поле ввода, раскрывающийся список или поле со списком

Меню или вложенное меню


На рис. 8.1 показана иерархическая схема объекта CommandBar.

Рис. 8.1. Иерархическая схема объекта CommandBar

Обсудим наиболее часто используемые методы и свойства объекта CommandBar. Начнем с его методов.

Создает новую панель команд и добавляет ее в семейство CommandBars

Add (Name, Position, MenuBar, Temporary)

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

Восстанавливает в исходное состояние (по умолчанию) встроенную панель инструментов

Перейдем к обсуждению наиболее часто употребляемых свойств объекта CommandBar.

Определяет возможность доступа к панели команд

Определяет, видима ли строка панели команд. Например, скрыть панель инструментов Форматирование (Formatting) можно с помощью следующей инструкции:

Application. CommandBars («Formatting» ) .Visible = False

Отобразить все панели инструментов можно с помощью следующей инструкции:

Application. CommandBars .Visible = True

Возвращает семейство commandBarControis, состоящее из всех элементов управления конкретной панели инструментов

Возвращает местоположение панели команд. Допустимые значения:

Устанавливает защиту строки меню от изменений со стороны пользователя. Допустимые значения:

msoBarNoProtection, msoBarNoCustomize, msoBarNoResize, msoBarNoMove, msoBarNoChangeVisible, msoBarNoChangeDock, msoBarNoVerticalDock и msoBarNoHorizontalDock

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

Таблица 8.1. Названия панелей инструментов

Worksheet Menu Bar

Строка меню листа

Строка меню диаграммы

Семейство CommandBarControls и объект CommandBarControl

Семейство CommandBarControls содержит все элементы конкретной панели инструментов или меню. Важнейшим методом этого семейства является метод Add, создающий новый элемент. Рассмотрим синтаксис метода Add.

Добавляет новый элемент на панель управления или в меню. Возвращает объект CommandBarButton, CommandBarComboBox или CommandBarPopup.

Add (Type, Id, Parameter, Before, Temporary)

Обсудим вкратце основные свойства объекта CommandBarControi.

Текстовая строка, отображаемая в заголовке

Возвращает описание элемента управления

Устанавливает, является ли допустимым выбранный пользователем элемент управления

Возвращает номер встроенной кнопки, используемой в качестве элемента управления. Если это свойство равно нулю, то возвращается пустой элемент управления

Возвращает имя макроса, выполняемого при активизации элемента управления

Возвращает комбинацию горячих клавиш, назначенных элементу управления

Только для объекта CommandBarButton. Устанавливает . внешний вид кнопки. Допустимые значения:

Текст, отображаемый в окне всплывающей подсказки

Устанавливает режим отображения (видимость) на экране кнопки

Пример создания панели инструментов пользователя

Приведем пример проекта, который создает интерфейс приложения, состоящего из строки меню и одной панели инструментов. В панель инструментов входят две кнопки и раскрывающийся список. На поверхности одной из кнопок выводится рисунок, а другой — надпись (рис. 8.2).

Рис. 8.2. Пользовательский интерфейс

Каждая из кнопок связана с макросом таким образом, что их активизация приводит к выполнению соответствующего макроса. Кроме того, эти кнопки снабжены пояснительными надписями, которые отображаются в окне всплывающей подсказки. При закрытии приложения данная панель инструментов удаляется, а ее место занимают панели инструментов Стандартная (Standard) и Форматирование (Formatting).

В окне Проект — VBAProject (Project — VBAProject) выберите лист ThisWorkbook и наберите следующие две процедуры.

Private Sub Workbook_WindowActivate(ByVal Wn As Excel.Window)

‘ Процедура создания новой панели инструментов при

‘ открытии рабочей книги

‘ При открытии рабочей книги панели инструментов Форматирование

‘ и Стандартная скрываются

.CommandBars(«Standard»).Visible = False End With

‘ Создание новой панели инструментов с именем

‘ МояПанельИнструментов, которая будет

‘ удаляться при закрытии приложения

Position:=msoBarTop, MenuBar:=False, Temporary:=True)

.Visible = True With .Controls

‘ Создание кнопки с рисунком

.TooltipText = «КнопкаДейства!» .OnAction = «Действо 1»

‘ Создание кнопки с надписью

.OnAction = «Действо 2» End With

‘ Создание раскрывающегося списка

.Addltem «Приедет», 1 .Addltem «Уедет», 2

.Addltem «Еще не решил», 3

Private Sub Workbook_WindowDeactivate(ByVal Wn As Excel.Window)

‘ Процедура, отображающая панели инструментов Форматирование

‘ ‘ и Стандартная при закрытии приложения

А на листе модуля введите следующие две процедуры, которые будут выполняться при нажатии на соответствующие кнопки.

MsgBox «Результат действа 1»

MsgBox » Результат действа 2″

Пример создания строки меню пользователя

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

Рис. 8.3. Интерфейс с пользовательской строкой меню

В окне Проект — VBA Project (Project — VBAProject) выберите лист Thisworkbook и введите на нем следующие две процедуры.

Private Sub Workbook_WindowActivate(ByVal Wn As Excel.Window)

‘ Процедура создания новой строки меню при


‘ открытии рабочей книги. При закрытии приложения

‘ подданная строка удаттететея

With Application.CoimnandBars.Add(Name:=»МоеМеню», MenuBar:=True, Temporary:=True) .Visible = True

‘ Создание меню Меню!

.Caption = «&Меню1» With .Controls

With .Add (Type :=msoControlButtoj»)

.Caption = «Пункт&1» .OnAction = «АтьДва!»

‘ Создание подменю Меню1

.Caption = «&ПодМеню1» With

.Caption = «Пункт&2» .OnAction = «АтьДва2»

‘ Создание меню Меню2

.Caption = «&Меню2» With .Controls

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

MsgBox «Стой! Стоять! Буду стрелять!»

MsgBox «Стой! Стоять! Стреляю в воздух!»

MsgBox «Стой! Стоять! Последний раз стреляю в воздух!»

MsgBox «Стой! Стоять! Стреляю!»

Создание пользовательской панели инструментов вручную

Иногда бывает удобнее проектировать собственную панель вручную, чем ее программировать.

Создается панель пользователя по следующему алгоритму.

Выберите команду Вид, Панели инструментов, Настройка (View, Toolbars, Customize) или переместите указатель на любую панель инструментов и сделайте щелчок правой кнопкой мыши, а затем выберите команду Настройка (Customize).

В появившемся диалоговом окне Настройка (Customize) нажмите кнопку Создать (New) (рис. 8.4).

Рис. 8.4. Диалоговое окно Настройка

В появившемся диалоговом окне Создание панели инструментов в поле Панель инструментов (Toolbars) введите имя новой панели инструментов, например моя панель (рис. 8.5).

Рис. 8.5. Диалоговое окно Создание панели инструментов

Нажмите кнопку ОК. Это приведет к появлению новой панели инструментов (рис. 8.6). Пусть вас не смущает ширина панели инструментов. Она будет автоматически расширяться по мере ее заполнения элементами управления.

Рис. 8.6. Новая панель инструментов и диалоговое окно Настройка

Раскройте вкладку Команды (Commands) диалогового окна Настройка (Customize) и перетащите на новую панель нужные кнопки из списка Команды (Commands). Итак, панель инструментов создана (рис. 8.7). Программно та же панель инструментов создается следующими инструкциями:

.Add (Name :=» Моя панель» )

.Visible = True Application. CommandBars ( «Моя панель»)

. Controls .Add Type : =msoControlButton, )

. Controls. Add Type:=msoControlButton, ) .Controls.

Application. CommandBars («Моя панель») .Controls.

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

Рис. 8.7. Новая панель инструментов Моя панель

Удаление элемента управления из панели инструментов вручную

Вручную элемент управления удаляется из панели инструментов по следующему алгоритму.

Выберите команду Вид, Панели инструментов, Настройка (View, Toolbars, Customize) или переместите указатель на любую панель инструментов и сделайте щелчок правой кнопкой мыши, а затем выберите команду Настройка (Customize).

После появления диалогового окна Настройка (Customize) выберите удаляемую кнопку и перетащите ее за пределы панели инструментов в область рабочего листа, но так, чтобы она не попала на другую панель инструментов.

Отпустите кнопку мыши. Элемент управления удален. Удалите по указанному выше алгоритму, например, четвертую кнопку из панели инструментов моя панель. Программно тот же результат достигается инструкцией:

Application. CommandBars («Моя панель») .Controls (4) .Delete

Удаление пользовательской панели инструментов вручную

Вручную пользовательская панель инструментов удаляется по следующему алгоритму.

Выберите команду Вид, Панели инструментов, Настройка (View, Toolbars, Customize) или переместите указатель на любую панель инструментов и сделайте щелчок правой кнопкой мыши, а затем выберите команду Настройка (Customize).

Раскройте вкладку Панели инструментов (Toolbars) диалогового окна Настройка (Customize). Выделите пользовательскую панель и сбросьте соответствующий флажок, а затем нажмите кнопку Удалить (Delete). Программно тот же результат достигается инструкцией:

Application. CommandBars («Моя панель») .Delete

Назначение вручную макроса кнопке

Вручную элементу управления на панели инструментов макрос назначается по следующему алгоритму.

Выберите команду Вид, Панели инструментов, Настройка (View, Toolbars, Customize) или переместите указатель на любую панель инструментов и сделайте щелчок правой кнопкой мыши, а затем выберите команду Настройка (Customize).

Раскройте вкладку Команды (Commands) диалогового окна Настройка (Customize) и выберите элемент управления, который требуется связать с макросом. Нажмите кнопку Изменить выделенный объект (Modify selection). В появившемся меню выберите команду Назначить макрос (Assign Macro) (рис. 8.8).

Рис. 8.8. Меню с командой Назначить макрос

Появится диалоговое окно Назначить макрос (Assign Macro) (рис. 8.9). В списке Имя макроса (Macro Name) выберите имя макроса, назначаемое элементу управления. Нажмите кнопку ОК диалогового окна Назначить макрос (Assign Macro) и кнопку Закрыть (Close) диалогового окна Настройка (Customize). Теперь макрос назначен кнопке.

Рис. 8.9. Диалоговое окно Назначить макрос

Изменение и создание вручную изображения на кнопке

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

Выберите команду Вид, Панели инструментов, Настройка (View,
Toolbars, Customize) или переместите указатель на любую панель 1 инструментов и сделайте щелчок правой кнопкой мыши, а затем выберите команду Настройка (Customize).

1 Шаг
Шаг 2 Раскройте вкладку Команды (Commands) диалогового окна Настройка (Customize) и выберите кнопку, которую следует видоизменить. Нажмите кнопку Изменить выделенный объект (Modify selection). Выберите команду Выбрать значок для кнопки (ChangeButton Image) и один из значков в появившемся меню (рис. 8.10). Нажмите кнопку Закрыть (Close) диалогового окна Настройка (Customize). Теперь изображение на кнопке изменилось.

Рис. 8.10. Диалоговое окно со значками

Если необходимо создать пользовательское изображение на кнопке или подкорректировать уже существующее, шаг 2 алгоритма должен быть следующим.

Рис. 8.11. Диалоговое окно Редактор кнопок

Раскройте вкладку Команды (Commands) диалогового окна Настройка (Customize) и выберите кнопку, которую следует видоизменить. Нажмите кнопку Изменить выделенный объект (Modify selection). Выберите команду Изменить значок на кнопке (Edit Button Image).

Появится диалоговое окно Редактор кнопок (Edit Button) (рис. 8.11). Используя средства этого редактора можно создать любое изображение на поверхности кнопки. Нажмите кнопку OK диалогового окна Редактор кнопок (Edit Button) и кнопку Закрыть (Close) диалогового окна Настройка (Customize). Теперь изображение на кнопке изменилось.

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

Это мы видим на примере СТО и ОТО, превратившихся в своеобразный вид религии, управляющей наукой и общественным мнением. Никакое количество фактов, противоречащих им, не может преодолеть формулу Эйнштейна: «Если факт не соответствует теории — измените факт» (В другом варианте » — Факт не соответствует теории? — Тем хуже для факта»).

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

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

Понятие «мысленный эксперимент» придумано специально спекулянтами — релятивистами для шулерской подмены реальной проверки мысли на практике (эксперимента) своим «честным словом». Подробнее читайте в FAQ по эфирной физике.

Excel VBA V >

Show/H >Got any Excel Questions? Excel Help

One of the most exciting parts of Excel is perhaps its ability to be customized to show the end user something quite different. For example, many build their own custom toolbar and distribute them with their Spreadsheet. However, the one question that come up time and time again is ‘how can I h > Attach Your Toolbar to the Workbook


For this example I will assume you have a custom toolbar called «MyToolbar» and you wish to hide ALL of Excel’s built in toolbars and show only «MyToolbar». Before we do so though, it is VITAL that you attach your custom toolbar to the Workbook that will be using it. This will also stop users from being able to make changes stick and ensure you do not get the «The Macro could not be found«, or where clicking a toolbar button opening up the Workbook so it can run the macro being clicked. To attach the custom toolbar and over-come these issues, follow the steps below;

1) Open the Workbook that should have the custom toolbar.

2) Right click on any grey unused part of any toolbar and choose «Customize».

3) On the «Toolbars» page check «MyToolbar» (or the applicable name) so it becomes visible.

4) Click «Attach» and then from the «Attach Toolbar» dialog select your toolbar and then click «Copy».

5) Click «Ok» then «Cancel» and it’s done!

You should now be aware that, ANY changes made to your custom toolbar will not stick (between closing and re-opening the Workbook it’s attached to) unless you first (before any changes) go back to the «Attach Toolbar» dialog and select your toolbar, this time from the right s > Coding the Toolbar Show and Restore

The 2 macros below are what can be used to show your toolbar, remove all native toolbars and most importantly restore them back when done;

The best way to enure these 2 macros are run at the correct time, is to place a Run Statement in the Workbook_Activate, Workbook_Deactivate procedures of the Workbook Object (ThisWorkbook). To get there quickly, right click on the Excel icon top left next to «File» on the Worksheet Menu Bar and select «View Code». In here place the code below;

Note the deletion of the custom toolbar when the Workbook closes, this is what prevents any changes sticking unless you have first deleted it (as shown above), made the changes and then attached it again. IMPORTANT: Do not run the Application.CommandBars(«MyToolbar»).Delete when the custom toolbar is NOT attached.

Special! Free Choice of Complete Excel Training Course OR Excel Add-ins Collection on all purchases totaling over $64.00. ALL purchases totaling over $150.00 gets you BOTH! Purchases MUST be made via this site . Send payment proof to [email protected] 31 days after purchase date.

Instant Download and Money Back Guarantee on Most Software

Excel VBA V > Excel Trader Package Technical Analysis in Excel With $139.00 of FREE software!

Microsoft ® and Microsoft Excel ® are registered trademarks of Microsoft Corporation. OzGrid is in no way associated with Microsoft

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

Прикреплённая к статье надстройка содержит модуль, который может создавать панель инструментов любой сложности при запуске файла.

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

Формирование панели инструментов происходит при загрузке файла, при закрытии же его — созданная панель скрывается:

Основной код модуля:

Вложение Размер Загрузки Последняя загрузка
CommandBar.xla 44.5 КБ 94 1 год 41 неделя назад
MultiLevelCommandBar.xla 43 КБ 70 1 год 40 недель назад
  • 65796 просмотров

Комментарии

Решение с кодировкой описано по этой ссылке

у меня английский excel, со шрифтами беда

Подгрузка своих картинок с диска

Sub ImageFromExternalFile()
Dim Btn As Office.CommandBarButton
Set Btn = Application.CommandBars.FindControl( > .Controls.Add(Type:=msoControlButton, temporary:=True)
With Btn
.Caption = «Click Me»
.Style = msoButtonIconAndCaption
.Picture = LoadPicture(«C:\TestPic.bmp»)
End With
End Sub

Подгрузка своих картинок из документа

Sub ImageFromEmbedded()
Dim P As Excel.Picture
Dim Btn As Office.CommandBarButton
Set Btn = Application.CommandBars.FindControl( > .Controls.Add(Type:=msoControlButton, temporary:=True)
Set P = Worksheets(«Sheet1»).Pictures(«ThePict»)
P.CopyPicture xlScreen, xlBitmap
With Btn
.Caption = «Click Me»
.Style = msoButtonIconAndCaption
.PasteFace
End With
End Sub

Если вопрос личного плана, — на почту или в скайп.
Если надо что-то сделать за денежку, — оформляете заказ.
Если вопрос по Excel (но статьи на сайте нет), — обращайтесь на форумы по Excel (там всегда подскажут и помогут)

Да, не туды в Object Browser’e глянул, извиняюсь.

А если у меня вопрос к Вам, не касающийся этой темы, и подходящей темы нет, то как быть?

Ну а как нет-то. смотрите пример в этой статье
Если вы говорите про msoControlButton на панели инструментов Excel

Оно хорошо, но разве у Button есть свойство FaceID?

Яков, вроде это можно сделать (и даже, по-моему, я делал такое лет 5 назад), — но забыл, как именно.
Возни с этим много, а фактической пользы мало.
Я просто выбираю подходящую среди сотен встроенных в Excel иконок: http://excelvba.ru/code/FaceID

Ещё вопрос: как можно кнопке типа msoControlButton указать свою картинку? Что надо загнать в свойство Picture и какие требования предъявляются к таким иконкам?
Заранее спасибо за ответ)

Здравствуйте (свинтус я, что сразу не поздоровался).
Подход правильный, т.к. суть во внешней подписке, которая слушает эти события — конечная цель в ней, а не в них. Private убирал, но не видит он эти Sub’ы всё равно. Хотя, попробую ещё. А вот вариант «сам-себе-присвоил» красивый. Не знал, что эксель на такое ведётся и событие изменения генерит. Спасибо!
. хотя в идеале всё равно хотелось бы своё событие дёргать, а не штатное.

Здравствуйте, Яков
Самый простой способ вызвать обработчик события, — просто обратиться к нему, как к любому другому макросу.
Ну и конечно, слово Private перед Sub надо убрать:

Код вызова примерно такой:

Второй простой способ вызвать обработчик этого события, — сделать вид, что мы изменили значения в диапазоне:

как-то так
для разных событий — по-разному.

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

PS: Вариант с RaiseEvent не сработает, — он в других случаях применяется.

Как можно (и можно ли) вызвать из макроса, подцепленного к кнопке, любое штатное событие книги/листа/приложения? Нужно как-то «пнуть» обработчик события. Если есть способ дёрнуть RaiseEvent’ом или ещё как свои собственные события — тож хорошо.

Хоть вопрос и не имеет никакого отношения к теме статьи, всё же предложу вариант:

можно метку прописывать в ячейку — заменив в коде Cells(1).ID на range(«h2»).value

Добрый день Игорь. воспользовался Вашим кодом для создания панелей инструментов. У меня возник вопрос : по нажатию на кнопку копировать диапазон данные копируются на лист2 и удаляется столбец. Как запретить повторное копирование так как после повторного нажатия кнопки удаляется столбец на новом листе.
Использую такой код :
‘ Кнопка копирование диапазона»

Sub Copy_Range()
On Error Resume Next
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(5, 1), Cells(LastRow, 5)).Copy Sheets(«Лист2»).Cells(5, 1) ‘ Копирование данных на лист2
Sheets(«лист2»).Columns(«D:D»).Delete Shift:=xlToLeft ‘удаление столбца D

Здравствуйте, вот код который добавляет на ленту в надстройки кнопку:

Sub addinn1()
With Application.Toolbars(1).ToolbarButtons.Add(Button:=222)
.Name = «Кнопка»
.OnAction = «макрос1»
End With
End Sub

Какой вид будет иметь кнопка, зависит от ее id. Мне нужен список с описанием «id — кнопка». Помогите кто чем может!

Здравствуйте!
Создал панель инструментов с кнопкой «Отчеты». Мне нужно ,что бы по нажатии на кнопку «Отчеты» появлялся выпадающий список (кнопки)с надписями(5штук)

Вообще-то можно всё, просто Вы с этим ещё не работали.
Я тоже раньше старался придерживаться совместимости версий, но после того, как убедил руководство полностью перейти на Excel 2010, забыл о нужных только мне проверках. Кстати, некоторые вещи без этих проверок не будут корректно выполняться в обоих версиях: например, при создании условного форматирования.
Но я никогда не писал универсальных программ, — только под чётко поставленное ТЗ (мне время дорого и некогда ждать обратную связь).

Я делаю универсальные программы, которые должны работать во всех версиях Excel (начиная с 2003).
Кроме того, меню в некоторых моих программах формируется динамически (макросом).
Как это сделать в Excel 2007? Никак? вот то-то же.
(т.е. сделать-то можно, но кода будет очень много)

А оставлять поддержку только Excel 2010 (где можно программно формировать панель инструментов на ленте) — ещё рано,
очень много пользователей до сих пор сидят на Excel 2003-2007

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

Для создания структуры Ribbon menu (для версий выше 11) есть рабочие программы http://clubs.ya.ru/excel/replies.xml?item_no=724
ЗЫ: Сделал один раз красиво и забыл.

Спасибо за информацию, начну изучать.

XML надо не в VBA добавлять, а в сам файл.
Меню проще сделать вручную, чем писать какой-то хитрый код.
Поищите в гугле Ribbon Editor — есть несколько хороших реализаций.

PS: Тут я вам вряд ли что могу подсказать, — сам ещё ни разу не делал «красивые» меню,
ибо в моих программах важнее совместимость с Excel 2003,
а XML можно добавить только в файлы формата Office 2007 (c 4-буквенным расширением)

Доброго времени суток!
Интересует вопрос использования в разработке кода xml (в данном случае для отображения больших кнопок). С разметкой я знаком, но никак не могу взять в толк, как добавить в VB код XML, можете задать направление для поиска решения моей проблемы?

Добрый!
Отличный сайт много интересных и нужных вещей. Спасибо.
Теперь вопрос: Панельки прикрутил все запускается отлично, но при каждом открытии Excel панельки создаются в одном и том же месте. Как сделать что они были расположены там и где все панели, что небыло необходимости постоянно их убирать в нужное место?

Очень рад,что обнаружил этот сайт.
Скопировал и запустил в лоб, ОТЛИЧНО.
Я уже думал, что от старой версии Excel пользовательские меню и кнопки маросов исчезли навсегда.
Буду посещать сайт узнавать больше. СПАСИБО.

Подскажите, пожалуйста, как сделать кнопки большого размера на ControlBar?

Спасибо за подсказку. Пожалуй, так и сделаю.

Здравствуйте, Максим.
К сожалению, я не знаю способа принудительно сделать перенос кнопок панели инструментов на другую строку.

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

Здравстуйте, Игорь.
Спасибо за предоставленный код — очень помог в создании собственной надстройки.
Возник вопрос. Если контролов (кнопок, текстовых полей, полей ввода и тп) на разрабатываемой панели надстройки будет много, то все они вытягиваются в одну строку. Как переносить контролы на новую строку, чтобы не пришлось прибегать к кнопке скролинга на панели «>>» ?
Excel 2007.

Старайтесь не пользоваться китайской программой Office Tab, чтобы не было таких проблем как у меня! Она, как раз, управляет вкладками и лезет также в панели.
Снёс её и некоторые (к сожалению только некоторые) коды заработали, в том числе и приведённый вами код.
Спасибо за внимание! Вы оперативно отвели на моё письмо. Очень приятно!

Спасибо большое, но это вы уже предлагали. Это установки, а не код.
Ничего не помогает. Приведённые вами и в цитируемой книги коды не производят ничего — в лучшем случае — и выдают сплошные сообщения об ошибках (кстати, эти же коды спокойно работают в Excel 2003!).
Я слышал, что просто невозможно написать код для Office 2010. Да, можно сделать свою панель и разместить на ней кнопки, но. только руками. Причём MacroRecoder при этом ничего не записывает! Это — дополнительное доказательство (во всяком случае для меня), что вот эта-та задача, как раз, и нерешаемая — пока не увижу работающего кода. Но его в сети нет.


Этот код создаёт панель инструментов во всех версиях Excel.
Только в Excel 2007 и 2010 эта панель размещается на ленте во вкладке «Надстройки»:
http://excelvba.ru/articles/CommandBar

Скажите, пожалуйста, есть ли код VBA для создания своей панели инструментоа в Excel 2010?!
Ни один приведённый здесь код не работает.
У меня просто не раегирует даже на CommandBars(«Formatting»).Visible = False

Наверное, в Excel 2010 сделать дто с помощью VBA просто не возможно.

Игорь,
Спасибо, за ответ. Я не программист, а простой пользователь.
Прошу прощения, что не нашел на сайте указанные материалы. Вы создали великолепный сайт. На нем очень много полезной информации, но найти нужное трудно.

Я так и не понял Вашу фразу «Хотя, достаточно один раз сформировать панель инструментов, и не удалять её программно при закрытии Excel — она никуда не денется, кнопки продолжат работать (при первом нажатии на кнопку, Excel сам откроет файл надстройки)».

Я взял ваш код вставил в свою надстройку, панель сформировалась, внес в неё свои макросы и удалил ненужный мне код для других кнопок. После закрытия excel панель не запоминается. Может я чего не правильно сделал. И существует возможность вставлять свои макросы в вашу настройку без работы в VBA. Но методом тыка я их не нашел))

Благодаря книги «Программирование на VBA в Microsoft Office 2010» (с.390) я нашел нужный мне код. Книга размещена на вашем сайте, за что отдельно спасибо.

Public Sub avf_panel()
Dim cbar1 As CommandBar
Dim cControll As CommandBarControl
Dim cId As Variant

Set cbar1 = CommandBars.Add(Name:=»AVF»)
With cbar1
.Enabled = True
.Visible = True

Set cControll = cbar1.Controls.Add(Type:=msoControlButton)
With cControll
.Caption = «Название кнопки»
.TooltipText = «Комментарий кнопки»
.Visible = True
.Face > .OnAction = «Ваш макрос»

Чтобы создать новую кнопку нужно скопировать-вставить с Set по End With еще раз. Переименовать кнопки и макрос.

Я предвижу гору критики, но надеюсь напоминание. Если что не так, просто удалите это сообщение.

С уважением, AVF

AVF, вы не пробовали сначала поискать ответы у меня на сайте?

Код создания панелей инструментов — единый для всех версий Excel,
только панель инструментов оказывается в разных местах:
http://excelvba.ru/articles/CommandBar

Если в 2007-м нужны КРАСИВЫЕ БОЛЬШИЕ КНОПКИ, то нужно использовать XML (соответственно, файл будет иметь расширение из 4 букв, и в Excel 2003 работать не будет)

Что мешает каждый раз запускать макрос формирования панели инструментов?
Я так и делаю всегда.
Хотя, достаточно один раз сформировать панель инструментов, и не удалять её программно при закрытии Excel — она никуда не денется, кнопки продолжат работать (при первом нажатии на кнопку, Excel сам откроет файл надстройки)

Игорь, спасибо все получилось.
Но возникла новая проблема. Как сделать так, чтобы настройка не терялась при закрытие — новом открытие excel? Чтобы каждый раз не запускать макрос?
Может сохранить настройку нев Xla, а в Personal.xlsb. Но тогда теряется смысл настройки((
Еще вопрос в excel 2003 можно создать свои кнопки про помощи встроенного редактора. В 2007 и далее этой функции нет. Многие формучане дружественных форумах подминали эту проблему и её решение только писать код в VBA. Причем это код «разный» (у каждого мастера свое кун-фу ;^)). Таким образом это решение не для всех. Вопрос: если создать кнопку+панель в 2003 excele, потом сохранить её в формате .xla и запустить в excel 2007, то будет ли она работать (находиться в закладке надстройки, иметь собственные рисунки кнопок + макросы)?

Здравствуйте, AVF.
Для просмотра и выбора значков, я использую специальный макрос, формирующий дополнительное выпадающее меню со значками и их кодами:
http://excelvba.ru/code/FaceID

Добрый день,
Отличный сайт и великолепный Код.
Долго искал как сделать собственную настройку, и наконец все нашел. Спасибо Вам за это.
Вопрос: где можно посмотреть иконки для кнопок и их номера? Если заменить 271 на другое число измениться и иконка.
«Add_Control AddinMenu, ct_BUTTON, 271, «CreateBackup», «Create Backup and Save», , True»
Как использовать свою иконку?

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

Подскажите, пожалуйста, где можно почитать на пояснения по поводу порядка написания команд и пояснения к ним (фактически интересует построчное пояснение как Вы и написали в предыдущем комментарии.

ПРИМЕР
Add_Control AddinMenu, ct_BUTTON, 271, «НазваниеВашегоМакроса», «Надпись на кнопке», , True

Спасибо, с этим разобрался!
Помогите разобраться, как теперь «привязать» макрос к «дополнительным» макросам из выпадающего списка.
Пробовал решить вопрос по аналогии, но не получилось.

Очень просто.
За добавление кнопок на панель, и назначение им макросов, отвечают эти строки кода:

Чтобы назначить ваш макрос кнопке, добавьте в код надстройки такую строку:
(или замените одну из существующий строк)

Здравствуйте!
Подскажите, пожалуйста, как привязать макрос к созданной (с помощью Вашей надстройки) панели инструментов.
Спасибо.

Вот о Position я и думал, только не знал как с ней справиться))
Еще раз спасибо за код.

Как при запуске поместить панель инструментов рядом с панелью «Стандартная»?

Надо задать значение свойства Position для панели инструментов.
В вашем случае Position = msoBarTop
Кроме того, не помешает последней строкой кода включить обновление экрана.
В итоге код функции будет выглядеть так:

Здравствуйте!
Применил в качестве основы для создания своего меню Ваш код.
Все получилось просто замечательно, спасибо.
Но вот с одним моментом я так и не смог справиться.
Как при запуске поместить панель инструментов рядом с панелью «Стандартная»? Сейчас она располагается просто на рабочем листе.
Смотрел Ваш код, пробовал по всякому, но так и не смог понять, где и как это можно написать в Вашем коде. Подскажите пожалуйста.
Спасибо.

Несколько советов по работе с VBA в Excel

Некоторое время назад меня попросили «помочь с Экселем», а потом и работа подвернулась такая, так что за последние пару месяцев я узнал много полезного, чем и хочу поделиться в догонку к недавней статье.

Предполагается, что вы знаете основы Visual Basic. Я не буду рассказывать, как создавать формы или модули, здесь только примеры кода.

Visual Basic

Опции

Во-первых, в VB массивы могут начинаться с индекса 1, что для многих странно, поэтому в начале модулей можно прописывать:

Так же рекомендуется прописать:

В этом случае интерпретатор потребует заблаговременного объявления всех переменных. Переменные объявлять нужно потому, что:
— VB запомнит их нАпиСание и не будет исправлять во всём коде на последний введенный вариант;
— иногда возникают ошибки с передачей переменных byRef, если они не объявлены (то есть надо или объявить переменную, или приписать в функции/процедуре перед ней byVal).

Ещё одним важным оператором является ON ERROR. Привожу варианты:

Возможности языка

Хотя VB довольно прост, полезно почитать документацию по его синтаксису. Я, например, с удивлением узнал, что можно прописывать сложные усолвия в SELECT’ах (аналог switch):

Ускорение работы макросов

Часто макросы требуют долгого времени выполнения, которое можно значительно сократить. В начале и в конце каждой ресурсоёмкой функции вызвать Prepare и Ended.

По порядку:
1. Отключить перерисовку объектов на экране, чтобы ничего не мигало.
2. Выключить расчет. Внимание, если макрос прерваляс посреди работы, то расчет так и останется в ручном режиме!
3. Не обрабатывать события.
4. Отображение границ страниц, тоже почему-то помогает.
5. В статусной строке выводятся различные данные, что замедляет работу, отключаем.
6. Это если нужно. Выключает сообщения Экселя. Например, мы делаем Workbook.Close, Эксель хочет спросить сохранить ли изменения. При выключении этого параметра все ответы будут даны автоматически (изменения не сохранятся).

Важно понимать, что VBA выполняет все действия так же, как и пользователь. Поэтому для того, чтобы установить параметры страницы, он каждый раз открывает и закрывает окно параметров. У меня выставлялись параметры для 10 листов, это реально не быстро. Поэтому делаем так:

Далее, часто нужно просмотреть различные диапазоны ячеек и что-то с ними сделать. Тут важно не использовать циклы for с перебором индексов, они медленные. Можно использовать встроенные функции Экселя, но удобнее всего такой вариант:
Данный код просматривает указанный диапазон, выбирает в нем «специальные ячейки», в данном случае все, в которых есть формулы (т.е. начинаются со знака равно). Для каждой ячейки смотрится, если она не закрашена, то её надо защитить (см. далее) и покрасить. Такой код работает очень быстро.

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

Естественно, что если вам нужны однотипные значения в ячейках, нужно использовать автозаполнение, всё равно как «растягивание» ячеек пользователем.

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

Загрузка книги и события

При открытии книги каждый раз срабатывает процедура.
В данном случае настройки печати (поля, ориентация) сбрасываются на дефолтные. Можно и другую инициализацию выполнять. Важно, что если макросы отключены, то и не выполнится ничего. Если в Экселе вылезла вверху панелька с предупреждением о макросах и пользователь нажал «Включить», то именно в этот момент выполнится процедура Workbook_open().

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

Защита

Во-первых сразу отмечу, что MS Office не исполняет макросы на компьютерах, где он не нашел антивируса, если книга зашифрована. Сталкивался на компьютерах, где антивирус был, но видимо Windows XP об этом не знала.

Ещё антивирус может странным образом мешать работе, вызывать ошибки, не совсем объяснимые. Показал айтишникам, сказали ок, что-то сделали, не знаю.

Итак, нам надо защитить книгу, чтобы ввод был разрешен только в нужные ячейки (формулы и заголовки поменять нельзя). Во-первых, нужно сделать соответствующие ячейки «не защищенными». Для этого делаем одно из:
— выделяем диапазон, формат ячеек, снять галочку «Блокировать ячейку»;
— выводим кнопку «Блокировать ячейку» в быстрый доступ и нажимаем её, очень удобно смотреть на неё чтобы понять, защищена ячейка или же нет;
— а это пригодится, чтобы проверить третий вариант — написать макрос, который снимает защиту с нужных ячеек сам.

Далее нужно защитить лист. На вкладке Рецензирование есть такая кнопка. Окошко просит ввести пароль и установить исключения (что можно будет делать пользователю). К сожалению, список исключений маловат. Самое обидное, что нельзя разрешить сворачивать/разворачивать группы столбцов/строк. Поэтому действуем так, на загрузку книги прописываем:
Знак подчеркивания продолжает логическую строку на следующей физической строке. Итак, здесь мы:
1. Сняли защиту.
2. Включили группировку.
3. Поставили защиту, при этом:
— защита только от юзера, макросы продолжают иметь полный доступ (!), крайне важно;
— разрешили сортировку, фильтрацию и форматирование строк/столбцов (высота/ширина);
— DrawingObject в данном случае снимает защиту с примечаний к ячейкам, может и ещё с чего.

Тут мы сталкиваемся с парой сюрпризов. Во-первых, не все макросы будут работать даже так. Известный баг, ничего не сделаешь. Нельзя вставить строку, например. Приходится снимать и тут же ставить защиту. Если «злоумышленник» в этот момент нажмет ctrl+break, то защита слетит.

Во-вторых, скажем никаким способом нельзя удалять строки (AllowDeletingRows), в которых есть защищенные ячейки, хоть одна. Подробнее вот тут.

Решением (костылем) является добавление кнопки или сочетания клавиш для удаления. Заодно можно проверить, чтобы пользователь не удалил чего не надо. В Workbook_open добавляем:

Теперь процедура будет вызываться при нажатии shift+delete.
Знаю, код некрасивый, простите. Здесь я пытался проверить, что выделена строка, то есть строк там 1, а ячеек не меньше тысячи. Чтобы удалить не то, придется выделить тысячу ячеек начиная не с первого столбца. Далее проверяется имя листа и номера строк. Вместо 50 был расчет последенй строки (ведь их число меняется, если мы их удаляем и добавляем).

Заключение

VBA — весьма глючная вещь, которая позволяет сворачивать горы в MS Office. Многие предприятяи используют модели на Excel годами, и если они сделаны хорошо, то всё работает.

Для изучения VBA подходит он сам, во-первых там хорошая справка. Например, чтобы узнать все варианты что можно разрешить в методе Protect, нажимаем F1, Protect, ввод. И вуаля.

Во-вторых, можно проделать требуемые действия вручную, записав макрос, а потом просмотрев его код. Код будет ужасен (например, при изменении параметров страницы, макрос запишет значения всех параметров и полей, а не только измененного вами), но ответы найдутся. Хотя, например, .AutoFit, который записывается при изменении высоты ячейки по содержимому (двойной клик на границе слева), на самом деле не работает.

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

Add a Macro to the Toolbar

If you use an Excel macro frequently, you can add it to the Quick Access Toolbar. This way you can quickly access your macro. First, we record an empty macro.

1. On the Developer tab, click Record Macro.

2. Name the macro MyName. Choose to store the macro in Personal Macro Workbook. This way the macro will be available to all your workbooks (Excel files). This is possible because Excel stores your macro in a hidden workbook that opens automatically when Excel starts.


3. Click Stop Recording.

5. Create the macro:

This macro places your name in the Active Cell.

6. Now we can add this macro to the Quick Access Toolbar. Right click the Quick Access Toolbar and select Customize Quick Access Toolbar.

7. Under Choose commands, select Macros.

8. Select the macro and click Add.

9. You can modify the button that will be added to the Quick Access Toolbar by clicking on Modify. For example, choose a smiley.

11. You can now execute the macro by clicking on the smiley button added to the Quick Access Toolbar.

12. When you close Excel, Excel asks you to save the changes you made to the Personal Macro Workbook. Click Save to store this macro in a hidden workbook that opens automatically when Excel starts. This way the macro will be available to all your workbooks (Excel files).

The Slack Cheat Sheet: Shortcuts, Commands, and Syntax to Know

Top Deals

Ready to supercharge your Excel productivity? A custom toolbar can do just that.

A well-made Excel macro 5 Resources for Excel Macros to Automate Your Spreadsheets 5 Resources for Excel Macros to Automate Your Spreadsheets Searching for Excel macros? Here are five sites that have got what you’re looking for. Read More can perform a time-consuming task in one click, which is pretty convenient. It’s even more convenient when you construct a custom toolbar containing all your most commonly used macros.

Attaching a macro to a button How to Send Emails From an Excel Spreadsheet Using VBA Scripts How to Send Emails From an Excel Spreadsheet Using VBA Scripts Our code template will help you set up automated emails from within Excel using Collaboration Data Objects (CDO) and VBA scripts. Read More is one solution, but there are times when it would be great to embed that functionality into the Excel interface. By following these steps, you can put your macros right there in the Ribbon.

Here’s how to get started on your custom toolbar.

Adding a Tab to the Ribbon

First, we’re going to add our own custom tab to the Ribbon which will house our toolbar. Right-click it and select Customize the Ribbon.

On the next screen, click New Tab.

Highlight your new tab, then click Rename. I’m going to call mine Macros, but you can choose whatever you want.

Press OK to return to the spreadsheet.

Our Macros tab has appeared, just as we were hoping. However, it’s a little bit empty at the moment.

To give it some functionality, let’s whip up a few basic macros The 10 Best OneNote Macros You Should Try The 10 Best OneNote Macros You Should Try OneNote is an awesome productivity tool on its own, but you can take it to the next level using macros. We show you how to get started and the best macros available now. Read More .

Creating Macros

First, we’re going to create a very, very simple macro to get the basics down.

Creating the Time and Date Macro

First, head to the Developer tab and click Macros.

Enter the macro name dateandtime and then click Create.

Excel will open the Visual Basic editor. Add the following code:

This tells Excel to present a message box to the user and to populate that message box with the current time and date, per the Now command. Save your work — remembering to save your spreadsheet 10 Easy Excel Timesavers You Might Have Forgotten 10 Easy Excel Timesavers You Might Have Forgotten These ten tips are sure to minimize your time performing menial Excel tasks and boost your spreadsheet productivity. Read More as a macro-enabled file if you haven’t done so already — and head back to Excel.

Click Macros in the Developer tab once again, and this time highlight dateandtime and click Run.

You should see something like this:

Our message box macro works! Now let’s try something a little more complicated.

Creating the Auto-Header Macro

Open the Macros dialog once again, and this time enter the name customheaders and click Create.

Enter the following code under Sub customheaders():

This will populate the cells in the brackets following the Range command with the corresponding text string. Of course, you can switch out the headers for whatever you want, and expand the list as necessary.

Add this line of code to the bottom:

This will apply bold formatting 9 Tips for Formatting an Excel Chart in Microsoft Office 9 Tips for Formatting an Excel Chart in Microsoft Office First impressions matter. Don’t let an ugly Excel chart scare off your audience. Here’s everything you need to know about making your charts attractive and engaging in Excel 2020. Read More to each header. If you’ve added extra headers, make sure to adjust the cells in the brackets following the Range command.

Now, it’s time to head back to Excel and see whether our macro works as it should.

Indeed it did. This macro is handy if you’re setting up new worksheets that contain new data every week or month. Once we add this macro to our toolbar, we’ll be able to populate these headers with one click, rather than typing them out manually every time.

Now for one more macro.

Creating the Linked Spreadsheet Macro

First, create a brand new spreadsheet and save it. Then, open the document we were working with earlier and navigate to Developer > Macros. Enter the name linkedspreadsheet and click Create.

Enter the following code below Sub linkedspreadsheet():

However, you’ll need to swap out the path for the spreadsheet you just created. To find that out, navigate to the document in File Explorer, right-click it and select Properties.

This macro opens the specified workbook. I’m using a holiday availability chart that I have to reference often while looking at another spreadsheet, so it makes sense for me to have a direct link to this file on my toolbar.

Save your work and head back to Excel to test it out.

It works great. When I run the macro, the linked spreadsheet opens up straight away. Now we just need to add all these macros to our toolbar.

Populating the Toolbar

Open the Macros tab we created earlier and right-click the Ribbon. Select Customize the Ribbon.

Use the Choose commands from drop-down menu and select Macros.

You should see the three macros we made earlier. Highlight each one and use the Add button to insert it into a New Group under the Macros tab.

Highlight each macro and click Rename to give them a more presentable label, and add a custom icon.

Now we have a fully functional toolbar that offers instant access to those macros we created.

Make a Toolbar That Works for You!

Everyone knows that Excel is an incredibly powerful piece of software 16 Excel Formulas that Will Help You Solve Real Life Problems 16 Excel Formulas that Will Help You Solve Real Life Problems The right tool is half the work. Excel can solve calculations and process data faster than you can find your calculator. We show you key Excel formulas and demonstrate how to use them. Read More .

It can do just about anything — and as a result, the default set-up can be a little bit overwhelming.

Excel really comes into its own when you tailor it to your own usage. If you can create a custom toolbar composed of your own specialized macros, you’re sure to be more productive. No one knows your workflow better than you do, so no one is in a better position to shave off wasted time wherever possible.

All it takes is a little knowledge of VBA, and that’s an intim > The Excel VBA Programming Tutorial for Beginners The Excel VBA Programming Tutorial for Beginners VBA is a Microsoft Office power tool. You can use it to automate tasks with macros, set triggers, and lots more. We’ll introduce you to Excel visual basic programming with a simple project. Read More . Pretty soon, you’ll be ready to tailor your own macros, and that’s a great skill to have if you’re serious about mastering Excel.

Do you have a tip on creating Excel macros? Are you looking for help with the process of building a toolbar? Join the conversation in the comments section below!

ПРОГРАММИРОВАНИЕ ПАНЕЛИ ИНСТРУМЕНТОВ VBA

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

Объект CommandBar и семейство CommandBars

Объект CommandBar и семейство CommandBars используются для программирования строк меню и панелей инструментов. В семействе CommandBars хранятся все строки меню и панели инструментов конкретного приложения.

Семейство CommandBars содержится в объекте Application. Оно представляет собой панели команд. В свою очередь каждый объект CommandBar содержит семейство commandBarControls, состоящее из всех элементов управления данной панели инструментов. Свойство controls объекта CommandBar возвращает семейство CommandBarControls. Элементы семейства CommandBarControis относятся к одному из трех типов.

CommandBar But ton

Кнопка или элемент меню, вызывающий выполнение команды или подпрограммы

Сложно организованные меню, такие как поле ввода, раскрывающийся список или поле со списком

Меню или вложенное меню

На рис. 8.1 показана иерархическая схема объекта CommandBar.


Рис. 8.1. Иерархическая схема объекта CommandBar

Обсудим наиболее часто используемые методы и свойства объекта CommandBar. Начнем с его методов.

Создает новую панель команд и добавляет ее в семейство CommandBars

Add (Name, Position, MenuBar, Temporary)

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

Восстанавливает в исходное состояние (по умолчанию) встроенную панель инструментов

Перейдем к обсуждению наиболее часто употребляемых свойств объекта CommandBar.

Определяет возможность доступа к панели команд

Определяет, видима ли строка панели команд. Например, скрыть панель инструментов Форматирование (Formatting) можно с помощью следующей инструкции:

Application. CommandBars («Formatting» ) .Visible = False

Отобразить все панели инструментов можно с помощью следующей инструкции:

Application. CommandBars .Visible = True

Возвращает семейство commandBarControis, состоящее из всех элементов управления конкретной панели инструментов

Возвращает местоположение панели команд. Допустимые значения:

Устанавливает защиту строки меню от изменений со стороны пользователя. Допустимые значения:

msoBarNoProtection, msoBarNoCustomize, msoBarNoResize, msoBarNoMove, msoBarNoChangeVisible, msoBarNoChangeDock, msoBarNoVerticalDock и msoBarNoHorizontalDock

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

Таблица 8.1. Названия панелей инструментов

Worksheet Menu Bar

Строка меню листа

Строка меню диаграммы

Семейство CommandBarControls и объект CommandBarControl

Семейство CommandBarControls содержит все элементы конкретной панели инструментов или меню. Важнейшим методом этого семейства является метод Add, создающий новый элемент. Рассмотрим синтаксис метода Add.

Добавляет новый элемент на панель управления или в меню. Возвращает объект CommandBarButton, CommandBarComboBox или CommandBarPopup.

Add (Type, Id, Parameter, Before, Temporary)

Обсудим вкратце основные свойства объекта CommandBarControi.

Текстовая строка, отображаемая в заголовке

Возвращает описание элемента управления

Устанавливает, является ли допустимым выбранный пользователем элемент управления

Возвращает номер встроенной кнопки, используемой в качестве элемента управления. Если это свойство равно нулю, то возвращается пустой элемент управления

Возвращает имя макроса, выполняемого при активизации элемента управления

Возвращает комбинацию горячих клавиш, назначенных элементу управления

Только для объекта CommandBarButton. Устанавливает . внешний вид кнопки. Допустимые значения:

Текст, отображаемый в окне всплывающей подсказки

Устанавливает режим отображения (видимость) на экране кнопки

Пример создания панели инструментов пользователя

Приведем пример проекта, который создает интерфейс приложения, состоящего из строки меню и одной панели инструментов. В панель инструментов входят две кнопки и раскрывающийся список. На поверхности одной из кнопок выводится рисунок, а другой — надпись (рис. 8.2).

Рис. 8.2. Пользовательский интерфейс

Каждая из кнопок связана с макросом таким образом, что их активизация приводит к выполнению соответствующего макроса. Кроме того, эти кнопки снабжены пояснительными надписями, которые отображаются в окне всплывающей подсказки. При закрытии приложения данная панель инструментов удаляется, а ее место занимают панели инструментов Стандартная (Standard) и Форматирование (Formatting).

В окне Проект — VBAProject (Project — VBAProject) выберите лист ThisWorkbook и наберите следующие две процедуры.

Private Sub Workbook_WindowActivate(ByVal Wn As Excel.Window)

‘ Процедура создания новой панели инструментов при

‘ открытии рабочей книги

‘ При открытии рабочей книги панели инструментов Форматирование

‘ и Стандартная скрываются

.CommandBars(«Standard»).Visible = False End With

‘ Создание новой панели инструментов с именем

‘ МояПанельИнструментов, которая будет

‘ удаляться при закрытии приложения

Position:=msoBarTop, MenuBar:=False, Temporary:=True)

.Visible = True With .Controls

‘ Создание кнопки с рисунком

.TooltipText = «КнопкаДейства!» .OnAction = «Действо 1»

‘ Создание кнопки с надписью

.OnAction = «Действо 2» End With

‘ Создание раскрывающегося списка

.Addltem «Приедет», 1 .Addltem «Уедет», 2

.Addltem «Еще не решил», 3

Private Sub Workbook_WindowDeactivate(ByVal Wn As Excel.Window)

‘ Процедура, отображающая панели инструментов Форматирование

‘ ‘ и Стандартная при закрытии приложения

А на листе модуля введите следующие две процедуры, которые будут выполняться при нажатии на соответствующие кнопки.

MsgBox «Результат действа 1»

MsgBox » Результат действа 2″

Пример создания строки меню пользователя

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

Рис. 8.3. Интерфейс с пользовательской строкой меню

В окне Проект — VBA Project (Project — VBAProject) выберите лист Thisworkbook и введите на нем следующие две процедуры.

Private Sub Workbook_WindowActivate(ByVal Wn As Excel.Window)

‘ Процедура создания новой строки меню при

‘ открытии рабочей книги. При закрытии приложения


‘ подданная строка удаттететея

With Application.CoimnandBars.Add(Name:=»МоеМеню», MenuBar:=True, Temporary:=True) .Visible = True

‘ Создание меню Меню!

.Caption = «&Меню1» With .Controls

With .Add (Type :=msoControlButtoj»)

.Caption = «Пункт&1» .OnAction = «АтьДва!»

‘ Создание подменю Меню1

.Caption = «&ПодМеню1» With

.Caption = «Пункт&2» .OnAction = «АтьДва2»

‘ Создание меню Меню2

.Caption = «&Меню2» With .Controls

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

MsgBox «Стой! Стоять! Буду стрелять!»

MsgBox «Стой! Стоять! Стреляю в воздух!»

MsgBox «Стой! Стоять! Последний раз стреляю в воздух!»

MsgBox «Стой! Стоять! Стреляю!»

Создание пользовательской панели инструментов вручную

Иногда бывает удобнее проектировать собственную панель вручную, чем ее программировать.

Создается панель пользователя по следующему алгоритму.

Выберите команду Вид, Панели инструментов, Настройка (View, Toolbars, Customize) или переместите указатель на любую панель инструментов и сделайте щелчок правой кнопкой мыши, а затем выберите команду Настройка (Customize).

В появившемся диалоговом окне Настройка (Customize) нажмите кнопку Создать (New) (рис. 8.4).

Рис. 8.4. Диалоговое окно Настройка

В появившемся диалоговом окне Создание панели инструментов в поле Панель инструментов (Toolbars) введите имя новой панели инструментов, например моя панель (рис. 8.5).

Рис. 8.5. Диалоговое окно Создание панели инструментов

Нажмите кнопку ОК. Это приведет к появлению новой панели инструментов (рис. 8.6). Пусть вас не смущает ширина панели инструментов. Она будет автоматически расширяться по мере ее заполнения элементами управления.

Рис. 8.6. Новая панель инструментов и диалоговое окно Настройка

Раскройте вкладку Команды (Commands) диалогового окна Настройка (Customize) и перетащите на новую панель нужные кнопки из списка Команды (Commands). Итак, панель инструментов создана (рис. 8.7). Программно та же панель инструментов создается следующими инструкциями:

.Add (Name :=» Моя панель» )

.Visible = True Application. CommandBars ( «Моя панель»)

. Controls .Add Type : =msoControlButton, )

. Controls. Add Type:=msoControlButton, ) .Controls.

Application. CommandBars («Моя панель») .Controls.

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

Рис. 8.7. Новая панель инструментов Моя панель

Удаление элемента управления из панели инструментов вручную

Вручную элемент управления удаляется из панели инструментов по следующему алгоритму.

Выберите команду Вид, Панели инструментов, Настройка (View, Toolbars, Customize) или переместите указатель на любую панель инструментов и сделайте щелчок правой кнопкой мыши, а затем выберите команду Настройка (Customize).

После появления диалогового окна Настройка (Customize) выберите удаляемую кнопку и перетащите ее за пределы панели инструментов в область рабочего листа, но так, чтобы она не попала на другую панель инструментов.

Отпустите кнопку мыши. Элемент управления удален. Удалите по указанному выше алгоритму, например, четвертую кнопку из панели инструментов моя панель. Программно тот же результат достигается инструкцией:

Application. CommandBars («Моя панель») .Controls (4) .Delete

Удаление пользовательской панели инструментов вручную

Вручную пользовательская панель инструментов удаляется по следующему алгоритму.

Выберите команду Вид, Панели инструментов, Настройка (View, Toolbars, Customize) или переместите указатель на любую панель инструментов и сделайте щелчок правой кнопкой мыши, а затем выберите команду Настройка (Customize).

Раскройте вкладку Панели инструментов (Toolbars) диалогового окна Настройка (Customize). Выделите пользовательскую панель и сбросьте соответствующий флажок, а затем нажмите кнопку Удалить (Delete). Программно тот же результат достигается инструкцией:

Application. CommandBars («Моя панель») .Delete

Назначение вручную макроса кнопке

Вручную элементу управления на панели инструментов макрос назначается по следующему алгоритму.

Выберите команду Вид, Панели инструментов, Настройка (View, Toolbars, Customize) или переместите указатель на любую панель инструментов и сделайте щелчок правой кнопкой мыши, а затем выберите команду Настройка (Customize).

Раскройте вкладку Команды (Commands) диалогового окна Настройка (Customize) и выберите элемент управления, который требуется связать с макросом. Нажмите кнопку Изменить выделенный объект (Modify selection). В появившемся меню выберите команду Назначить макрос (Assign Macro) (рис. 8.8).

Рис. 8.8. Меню с командой Назначить макрос

Появится диалоговое окно Назначить макрос (Assign Macro) (рис. 8.9). В списке Имя макроса (Macro Name) выберите имя макроса, назначаемое элементу управления. Нажмите кнопку ОК диалогового окна Назначить макрос (Assign Macro) и кнопку Закрыть (Close) диалогового окна Настройка (Customize). Теперь макрос назначен кнопке.

Рис. 8.9. Диалоговое окно Назначить макрос

Изменение и создание вручную изображения на кнопке

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

Выберите команду Вид, Панели инструментов, Настройка (View,
Toolbars, Customize) или переместите указатель на любую панель 1 инструментов и сделайте щелчок правой кнопкой мыши, а затем выберите команду Настройка (Customize).

1 Шаг
Шаг 2 Раскройте вкладку Команды (Commands) диалогового окна Настройка (Customize) и выберите кнопку, которую следует видоизменить. Нажмите кнопку Изменить выделенный объект (Modify selection). Выберите команду Выбрать значок для кнопки (ChangeButton Image) и один из значков в появившемся меню (рис. 8.10). Нажмите кнопку Закрыть (Close) диалогового окна Настройка (Customize). Теперь изображение на кнопке изменилось.

Рис. 8.10. Диалоговое окно со значками

Если необходимо создать пользовательское изображение на кнопке или подкорректировать уже существующее, шаг 2 алгоритма должен быть следующим.

Рис. 8.11. Диалоговое окно Редактор кнопок

Раскройте вкладку Команды (Commands) диалогового окна Настройка (Customize) и выберите кнопку, которую следует видоизменить. Нажмите кнопку Изменить выделенный объект (Modify selection). Выберите команду Изменить значок на кнопке (Edit Button Image).

Появится диалоговое окно Редактор кнопок (Edit Button) (рис. 8.11). Используя средства этого редактора можно создать любое изображение на поверхности кнопки. Нажмите кнопку OK диалогового окна Редактор кнопок (Edit Button) и кнопку Закрыть (Close) диалогового окна Настройка (Customize). Теперь изображение на кнопке изменилось.

Excel это не сложно

Основные форумы => Вопросы по Excel и VBA => Тема начата: Valetnina от 21.01.2020, 17:22:40

Название: всплывающие подсказки кнопок команд на ленте Excel написать в VBA
Отправлено: Valetnina от 21.01.2020, 17:22:40

Честно ищу с самого утра в интернете как менять текст всплывающих подсказок к пользовательским кнопкам на панели управления Excel. Известно, как это делать с помощью XML + VBA (getscreentip в XML + пишем желаемый текст подсказки в аргумент переменной Screentip в VBA). Но задача сделать это БЕЗ xml, то есть только силами VBA (все созданные мной кнопки — на вкладке Надстройки / AddIns).

Возможно ли такое и если да, то как ?

controltiptext, tooltiptext, кружу вокруг да около, но результат пока нулевой.
Нашла одну интересную статью с сайта excel-VBA.ru (http://www.excel-vba.ru/chto-umeet-excel/kak-sozdat-svoyu-nadstrojku/), где к этому вопросу подходят оооочень близко, но действия согласно с ней пока не принесли успеха в моём конкретном случае.

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

Я в программировании новичок, поэтому задаю такие могущие показаться примитивными вопросы. Но я очень стараюсь :).

Я вижу, что Ваш код состоит из функции и операции вызова.

Должна ли я что-то добавить до или после самой функции и строчек для вызова Вашего кода, чтобы он «скомпилировался» ?

Если ввожу его в таком виде, как в Вашем сообщении, VBA выдает ошибку компиляции «тип, заданный пользователем, не определен» и выделяет мне вот эти строки:

Илон Маск рекомендует:  Использование JSON с JavaScript
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL