Надстройка для программного добавления кнопок на лист Excel

Кнопки на листе Excel, созданные макросом

Надстройка предназначена для автоматизации добавления кнопок запуска макроса на лист Excel

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

Решением стало создание этой надстройки - теперь достаточно выделить диапазон ячеек на листе Excel, нажать комбинацию клавиш типа Alt + 1, - и через мгновение на листе создаётся зелёная кнопка с названием «Запуск», расположенная точно поверх ранее выделенных ячеек. Остаётся только назначить этой кнопке макрос, щелкнув по ней правой клавишей мыши.

Пример кода VBA для создания кнопки:

Sub ПримерИспользования()
    СоздатьКнопку Selection, vbGreen, "Обработать данные": End Sub
End Sub

Для вызова формы (где можно настроить текст и цвет будущей кнопки) предназначена комбинация клавиш Ctrl + Alt + Shift + B

Код функции добавления кнопок на лист Excel:

Function СоздатьКнопку(ByRef ra As Range, Optional ByVal ButtonColor As Long = 255, _
                       Optional ByVal ButtonName$ = "Запуск", Optional ByVal MacroName As String = "")
    ' Функция рисует автофигуру (прямоугольник) поверх диапазона ячеек ra
    ' и окрашивает созданную кнопку (с названием ) в цвет Button_color
    ' Созданной кнопке назначается макрос MacroName
    On Error Resume Next: Err.Clear
    w = ra.Width: h = ra.Height: l = ra.Left: t = ra.Top
    w = IIf(w >= 10, w, 50): h = IIf(h >= 10, h, 50)    ' не создаём маленькие кнопки - минимум 10*10

    ' добавляем кнопку на лист
    Dim sha As Shape: Set sha = ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, l, t, w, h)
    With sha    ' оформляем автофигуру
        .Fill.Visible = msoTrue: .Fill.Solid
        .Fill.ForeColor.RGB = ButtonColor: .Fill.Transparency = 0.3
        .Fill.BackColor.RGB = vbWhite
        .Fill.TwoColorGradient msoGradientFromCenter, 2    ' градиентная заливка
        .Adjustments.item(1) = 0.23: .Placement = xlFreeFloating
        .OLEFormat.Object.PrintObject = False    ' кнопки не выводятся на печать
        .Line.Weight = 0.25: .Line.ForeColor.RGB = vbBlack ' делаем тонкий черный контур
        With .TextFrame    ' добавляем и форматируем текст
            .Characters.Text = ButtonName$ ' добавляем текст
            With .Characters.Font ' изменяем начертание текста
                .Size = IIf(h >= 16, 10, 8): .Bold = True:
                .Color = vbBlack: .Name = "Arial" ' цвет и шрифт
            End With
            .HorizontalAlignment = xlCenter: .VerticalAlignment = xlVAlignCenter
        End With
        .onaction = MacroName    ' назначаем кнопке макрос (если он задан в параметрах)
    End With
End Function

Вложения:
Buttons.xla49.5 КБ

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

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

VB пишет что не поддерживает Set Let
в Set cb = .CommandButton1.ShapeRange
Как быть?
может подскажите

Гениально а можно скриптом добавить кнопку на панель (на ленту )? Очень интерисует этот вопрос, поскольку неоходимо внедрить один проэкт где у всех пользователей должна быть кнопка на панельке Outlook.

Вы просто чудо!

Примерно так это делается:

Sub test()
    Dim cb As ShapeRange
    With Лист1
        Set cb = .CommandButton1.ShapeRange
 
        cb.Top = .Range("B2").Top
        cb.Left = .Range("B2").Left
        cb.Width = .Range("B2").Width
        cb.Height = .Range("B2").Height
 
        .CommandButton1.Placement = xlMoveAndSize
    End With
End Sub

Все это мило.
Как уже готовый CommandButton1 (ActiveX) Листа "Лист1" программно вписать в ячейку "B2" того же листа (подогнать по размеру; размеры ячейки постоянно меняются, - нужно, чтобы кнопка менялась вместе с ячейкой)
Спасибо...

Списибо, настройка - высший класс!

Проверил - всё работает, файл скачивается.

Ссылка на вложение не работает.

Почему я не видел эту надстройку раньше)))
Отличная штука!
Спасибо!

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
                   ___     __             ____  
__ _ __ _ / _ \ / /_ _ _ | ___|
/ _` | / _` | | | | | | '_ \ | | | | |___ \
| (_| | | (_| | | |_| | | (_) | | |_| | ___) |
\__, | \__,_| \__\_\ \___/ \__, | |____/
|___/ |___/
Введите код, изображенный в стиле ASCII-арт.

Не получается применить макрос? Не удаётся изменить код под свои нужды?

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