Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2011, 19:31   #1
Olya1985
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 113
По умолчанию vba button excel

как можно программно создать кнопку и поместить на рабочий лист в определенную ячейку?

например, как в этом скрипте сделать так чтобы он начинал работать нажатием этой созданной кнопки?

Sub SayHello()
Msg = "Is your name " & Application.UserName & "?"
Ans = MsgBox(Msg, vbYesNo)
If Ans = vbNo Then
MsgBox "Oh, never mind."
Else
MsgBox "I must be clairvoyant!"
End If
End Sub
Olya1985 вне форума Ответить с цитированием
Старый 03.01.2011, 20:06   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

В этой программе как раз есть такая функциональность: http://excelvba.ru/fortepiano

Для этих целей используется специальная функция, которая в качестве параметров принимает диапазон ячеек для размещения кнопки, цвет и текст создаваемой кнопки, а также имя макроса, который ей будет назначен:
Код:

Function СоздатьКнопку(ByRef ra As Range, ByVal Button_color As Long, ByVal txt As String, _
                       Optional ByVal MacroName As String = "") As Shape
    On Error Resume Next: Err.Clear
    w = ra.Width: h = ra.Height: w = IIf(w > 10, w, 50): h = IIf(h > 10, h, 50)
    l = ra.Left: t = ra.Top:
    Dim sha As Shape: Set sha = ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, l, t, w, h)
    With sha
        .Fill.Visible = msoTrue: .Fill.Solid: .Fill.ForeColor.RGB = Button_color:    '.Fill.Transparency = 0.3
        .Fill.BackColor.RGB = vbWhite:    '.Fill.TwoColorGradient msoGradientFromCenter, 2
        .Adjustments.Item(1) = 0.16: .Placement = xlFreeFloating: .OLEFormat.Object.PrintObject = False
        With .TextFrame
            .Characters.Text = txt
            With .Characters.Font
                .Size = IIf(h >= 16, 10, 8): .Bold = True: .name = "Arial Narrow": .name = "Arial"
            End With
            .HorizontalAlignment = xlCenter: .VerticalAlignment = xlVAlignCenter
        End With
        .OnAction = MacroName
    End With
    Set СоздатьКнопку = sha
End Function
EducatedFool вне форума Ответить с цитированием
Старый 03.01.2011, 20:12   #3
Olya1985
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 113
По умолчанию

а как можно привязать макрос к кнопке command button, созданной через панель инструментов?
Olya1985 вне форума Ответить с цитированием
Старый 03.01.2011, 20:13   #4
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Так:
Код:
Sub MyButton()
' Макрос записан 03.01.2011 (Sergey)
    Dim Mb As Object
    Set Mb = ActiveSheet.Buttons.Add(143.25, 12, 96, 23.25)
    Mb.OnAction = "SayHello"
End Sub

Sub SayHello()
    Dim msg$, ans%
    msg = "Is your name " & Application.UserName & "?"
    ans = MsgBox(msg, vbYesNo)
    If ans = vbNo Then
        MsgBox "Oh, never mind."
    Else
        MsgBox "I must be clairvoyant!"
    End If
End Sub
Уже когда отправил, увидел Ваш ответ, EducatedFool. Ну, куда деваться...
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728

Последний раз редактировалось kuklp; 03.01.2011 в 20:21.
kuklp вне форума Ответить с цитированием
Старый 03.01.2011, 20:20   #5
Olya1985
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 113
По умолчанию

а этот код где должен быть расположен?


ub MyButton()
' Макрос записан 03.01.2011 (Sergey)
Dim Mb As Object
Set Mb = ActiveSheet.Buttons.Add(143.25, 12, 96, 23.25)
Mb.OnAction = "SayHello"
End Sub
Olya1985 вне форума Ответить с цитированием
Старый 03.01.2011, 20:30   #6
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Цитата:
Сообщение от Olya1985 Посмотреть сообщение
а этот код где должен быть расположен?


Sub MyButton()
' Макрос записан 03.01.2011 (Sergey)
Dim Mb As Object
Set Mb = ActiveSheet.Buttons.Add(143.25, 12, 96, 23.25)
Mb.OnAction = "SayHello"
End Sub
Где хотите. Либо в модуле листа, либо в общем модуле. Можно в личной книге макросов. Вопрос, как Вы собираетесь запускать этот макрос. Вот это:"(143.25, 12, 96, 23.25)" - координаты и размер кнопки.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728

Последний раз редактировалось kuklp; 03.01.2011 в 20:33.
kuklp вне форума Ответить с цитированием
Старый 03.01.2011, 20:35   #7
Olya1985
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 113
По умолчанию

а как теперь удалить эту кнопку из excel? у меня из создалось 3, пыталась изменить размеры кнопки и координаты
Olya1985 вне форума Ответить с цитированием
Старый 03.01.2011, 20:43   #8
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Код:
Public Sub www()
    Dim Mb As Object, msg$, ans%
    For Each Mb In ActiveSheet.Buttons
        msg = "Delete?"
        ans = MsgBox(msg, vbYesNo)
        If ans = vbYes Then
            Mb.Delete
        End If
    Next
End Sub
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 03.01.2011, 20:47   #9
Olya1985
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 113
По умолчанию

спасибо.
еще скажите, пожалуйста,
а созданную программным образом кнопку нельзя просто удалить из excel через меню?
Olya1985 вне форума Ответить с цитированием
Старый 03.01.2011, 20:54   #10
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Можно и без меню. ПКМ-Вырезать(Cut).
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Button ex-hack Общие вопросы C/C++ 5 16.04.2010 23:50
Button Chudo4258 Помощь студентам 2 07.05.2009 21:06
button xaft Общие вопросы .NET 4 08.04.2009 14:08
button blackstersl Общие вопросы Delphi 7 29.08.2008 15:31
Button... Черничный Общие вопросы Delphi 4 10.06.2008 01:34