powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA + Excel Кнопка на листе
18 сообщений из 18, страница 1 из 1
VBA + Excel Кнопка на листе
    #33336403
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как можно программно повесить на кнопку макрос? Кнопка находится на обычном экселевском листе...

Аленочка тм
...
Рейтинг: 0 / 0
VBA + Excel Кнопка на листе
    #33336412
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Аленочка

Когда рисуешь кнопку на странице и когда дважды кликуешь на кнопке
открываеся событие клик для этой кнопке
Если у тебя есть готовый макрос в модуле то просто скопируй операторы твоего макроса


Sud Макрос1()

твой код .................

End Sub()

после будет выглядеть так

Private Sub CommandButton1_Click()

твой код .................

End Sub

или так


Private Sub CommandButton1_Click()

Макрос1

End Sub
...
Рейтинг: 0 / 0
VBA + Excel Кнопка на листе
    #33336447
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 TIKO

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

Аленочка тм
...
Рейтинг: 0 / 0
VBA + Excel Кнопка на листе
    #33336473
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
    Dim cb As OLEObject
    Dim vbc As VBComponent
    Dim cm As CodeModule
    Dim i As Integer
    
    Set cb = ThisWorkbook.Worksheets("Лист1").OLEObjects.Add( _
      ClassType:="Forms.CommandButton.1", Link:=False, _
      DisplayAsIcon:=False, Left:= 200 , Top:= 40 , _
      Width:= 100 , Height:= 30 )
      
    Set vbc = ThisWorkbook.VBProject.VBComponents("Лист1")
    Set cm = vbc.CodeModule
    
    With cm
        i = .CountOfLines +  1 
        .InsertLines i, "Private Sub " & cb.Name & "_Click()"
        i = i +  1 
        .InsertLines i, _
        "    MsgBox ""Test!"", vbInformation"
        i = i +  1 
        .InsertLines i, "End Sub"
    End With
    
    Set cm = Nothing
    Set vbc = Nothing
...
Рейтинг: 0 / 0
VBA + Excel Кнопка на листе
    #33337166
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь2
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
    Dim cb As OLEObject
    Dim vbc As VBComponent
    Dim cm As CodeModule
    Dim i As Integer
    
    Set cb = ThisWorkbook.Worksheets("Лист1").OLEObjects.Add( _
      ClassType:="Forms.CommandButton.1", Link:=False, _
      DisplayAsIcon:=False, Left:= 200 , Top:= 40 , _
      Width:= 100 , Height:= 30 )
      
    Set vbc = ThisWorkbook.VBProject.VBComponents("Лист1")
    Set cm = vbc.CodeModule
    
    With cm
        i = .CountOfLines +  1 
        .InsertLines i, "Private Sub " & cb.Name & "_Click()"
        i = i +  1 
        .InsertLines i, _
        "    MsgBox ""Test!"", vbInformation"
        i = i +  1 
        .InsertLines i, "End Sub"
    End With
    
    Set cm = Nothing
    Set vbc = Nothing


Ругнулся на строчку:

Код: plaintext
   Dim vbc As VBComponent
...
Рейтинг: 0 / 0
VBA + Excel Кнопка на листе
    #33337223
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если закоментировать

Код: plaintext
1.
'Dim vbc As VBComponent
 'Dim cm As CodeModule

то создаётся только кнопка, никаких событий при её нажатии не возникает

Аленочка тм
...
Рейтинг: 0 / 0
VBA + Excel Кнопка на листе
    #33337247
Подключи библиотеку. Tools -> References -> Microsoft Visual Basic for Applications Extensibility (см. рисунок).
...
Рейтинг: 0 / 0
VBA + Excel Кнопка на листе
    #33337383
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая-то странная ситуация, на листе Лист7 (Лист2) кнопка создаётся, а текст

Код: plaintext
1.
2.
Private Sub CommandButton1_Click()
    MsgBox "Test!", vbInformation
End Sub

появляется на листе Лист2 (Клиенты). Что делать?


Аленочка тм
...
Рейтинг: 0 / 0
VBA + Excel Кнопка на листе
    #33337403
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АленочкаКакая-то странная ситуация, на листе Лист7 (Лист2) кнопка создаётся, а текст

Код: plaintext
1.
2.
Private Sub CommandButton1_Click()
    MsgBox "Test!", vbInformation
End Sub

появляется на листе Лист2 (Клиенты). Что делать?


Аленочка тм

а всё сама разобралась

нужно было писать:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Sub newbutton()

    Dim cb As OLEObject
    Dim vbc As VBComponent
    Dim cm As CodeModule
    Dim i As Integer
    
    Set cb = ThisWorkbook.Worksheets("Лист2").OLEObjects.Add( _
      ClassType:="Forms.CommandButton.1", Link:=False, _
      DisplayAsIcon:=False, Left:= 200 , Top:= 40 , _
      Width:= 100 , Height:= 30 )
      
    Set vbc = ThisWorkbook.VBProject.VBComponents("Лист7")
    Set cm = vbc.CodeModule
    
    With cm
        i = .CountOfLines +  1 
        .InsertLines i, "Private Sub " & cb.Name & "_Click()"
        i = i +  1 
        .InsertLines i, _
        "    MsgBox ""Test!"", vbInformation"
        i = i +  1 
        .InsertLines i, "End Sub"
    End With
    
    Set cm = Nothing
    Set vbc = Nothing

End Sub


ОГРОМНОЕ СПАСИБО Пользователю2
...
Рейтинг: 0 / 0
VBA + Excel Кнопка на листе
    #33337462
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь ситуация усугубилась тем, что я не знаю как у меня будет называться лист, вернее я знаю, что у меня он будет переименован в номер текущего года, но вот каким он будет по счёту в проекте, вот это вопрос...Как узнать?

Аленочка тм
...
Рейтинг: 0 / 0
VBA + Excel Кнопка на листе
    #33337588
Worksheets("...") указывает на название листа в книге.

VBComponents("...") указывает на имя модуля листа в проекте.

АленочкаТеперь ситуация усугубилась тем, что я не знаю как у меня будет называться лист, вернее я знаю, что у меня он будет переименован в номер текущего года, но вот каким он будет по счёту в проекте, вот это вопрос...Как узнать?
Поясни точнее.
...
Рейтинг: 0 / 0
VBA + Excel Кнопка на листе
    #33337645
Так еще можно, чтобы не путаться.

Код: plaintext
1.
    Set vbc = ThisWorkbook.VBProject.VBComponents _
      (ThisWorkbook.Worksheets("Лист1").CodeName)
...
Рейтинг: 0 / 0
VBA + Excel Кнопка на листе
    #33337802
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь2Так еще можно, чтобы не путаться.

Код: plaintext
1.
    Set vbc = ThisWorkbook.VBProject.VBComponents _
      (ThisWorkbook.Worksheets("Лист1").CodeName)


спасибо подошло
...
Рейтинг: 0 / 0
VBA + Excel Кнопка на листе
    #33337918
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как теперь созданной кнопке назначить Caption="Меню"?

Аленочка тм
...
Рейтинг: 0 / 0
VBA + Excel Кнопка на листе
    #33341357
Код: plaintext
1.
2.
3.
4.
5.
    Set cb = ThisWorkbook.Worksheets("Лист1").OLEObjects.Add( _
      ClassType:="Forms.CommandButton.1", Link:=False, _
      DisplayAsIcon:=False, Left:= 200 , Top:= 40 , _
      Width:= 100 , Height:= 30 )
    
    cb.Object.Caption = "Меню"
...
Рейтинг: 0 / 0
VBA + Excel Кнопка на листе
    #33341567
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аленочка тм

Спасибо!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
VBA + Excel Кнопка на листе
    #35387495
а нельзя сделать так, чтоб создаваемая программно кнопка имела относительную привязку к конкретной ячейке?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
VBA + Excel Кнопка на листе
    #36863080
LtOldy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пользователь 10,
если я правильно понял...
создаваемая кнопка помещается в 1ю ячейку и имеет такие же размеры.
Set cb = ThisWorkbook.Worksheets("SHEET1").OLEObjects.Add( _
ClassType:="Forms.CommandButton.1", Link:=False, _
DisplayAsIcon:=False, Left:=ThisWorkbook.Worksheets("sheet1").Cells( 1,1 ).Left, _
Top:=ThisWorkbook.Worksheets("sheet1").Cells( 1,1 ).Top,_
Width:=ThisWorkbook.Worksheets("sheet1").Cells( 1,1 ).Width,_
Height:=ThisWorkbook.Worksheets("sheet1").Cells( 1,1 ).Height)
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA + Excel Кнопка на листе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]