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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2015, 14:36   #1
who
Пользователь
 
Регистрация: 11.09.2014
Сообщений: 44
По умолчанию Копирование кнопки макросом и присвоение новой кнопке своего имени

У меня есть лист1, на котором есть некоторое количество кнопок.
Среди них есть CommandButton2
как, находясь на листе2, макросом скопировать эту кнопку в конкретное место на листе1, например спозиционировать новую кнопку по ячейке С24 и задать новое имя кнопке (.Name, а не .Caption), чтобы я знал это имя и использовал в дальнейшем в работе.
who вне форума Ответить с цитированием
Старый 23.11.2015, 15:55   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Form Control

To copy a button from one sheet to another preventing the automatic name change use the below code. Excel by default gives a new name to a copied button (even on a different sheet) so you have to rename it to match the name of the button youre copying.

Use CopyButton() sub to achieve it. There are 4 required parameters

from - sheet name to copy the button from
btnName - the name of the control you want to copy
toWorksheet - target worksheet
rng - target range to associate with the button
Код:
Sub CopyPasteButton()
    CopyButton "SRC", "Button 1", "TRGT", "B10"
End Sub

Private Sub CopyButton(from As String, btnName As String, toWorksheet As String, rng As String)
    Application.ScreenUpdating = False
    Sheets(from).Shapes(btnName).Copy
    Sheets(toWorksheet).Activate
    Sheets(toWorksheet).range(rng).Select
    Sheets(toWorksheet).Paste
    Selection.ShapeRange.Name = btnName
    Application.ScreenUpdating = True
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 23.11.2015, 16:34   #3
who
Пользователь
 
Регистрация: 11.09.2014
Сообщений: 44
По умолчанию

Спасибо, принцип понял!
who вне форума Ответить с цитированием
Старый 23.11.2015, 16:40   #4
pashulka
Форумчанин
 
Регистрация: 03.11.2006
Сообщений: 524
По умолчанию

Альтернативный вариант :

Код:
Private Sub Test()
    With Лист1.CommandButton2.Duplicate 'Лист1.OLEObjects("CommandButton2").Duplicate
         .Top = Лист1.[C24].Top
         .Left = Лист1.[C24].Left
         .Name = "CommandButton3" 
    End With
End Sub
Вложения
Тип файла: zip ExampleDuplicate.zip (9.5 Кб, 12 просмотров)
pashulka вне форума Ответить с цитированием
Старый 23.11.2015, 16:51   #5
who
Пользователь
 
Регистрация: 11.09.2014
Сообщений: 44
По умолчанию

тоже сапасибо!
а как записать на эту новую кнопку тем же макросом макрос? это конечно другая тема, но не нашёл похожего
who вне форума Ответить с цитированием
Старый 23.11.2015, 17:01   #6
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Попробуй
http://www.mrexcel.com/forum/excel-q...ml#post3681329
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 23.11.2015, 17:09   #7
pashulka
Форумчанин
 
Регистрация: 03.11.2006
Сообщений: 524
По умолчанию

Один из возможных вариантов
(необходимо доверить доступ к Visual Basic Project)

Код:
With ThisWorkbook.VBProject.VBComponents("Лист1").CodeModule
     .InsertLines 1, "Private Sub CommandButton3_Click()"
     .InsertLines 2, "    MsgBox ""Hello, Word"""
     .InsertLines 3, "End Sub"
End With
P.S.

Код:
ThisWorkbook.VBProject.VBComponents("Лист1").CodeModule.InsertLines 1, _
"Private Sub CommandButton3_Click()" & vbCrLf & _
"   MsgBox ""Hello, Word""" & vbCrLf & _
"End Sub"
Код:
ThisWorkbook.VBProject.VBComponents("Лист1").CodeModule.AddFromString _
"Private Sub CommandButton3_Click()" & vbCrLf & _
"   MsgBox ""Hello, Word""" & vbCrLf & _
"End Sub"

Последний раз редактировалось pashulka; 23.11.2015 в 17:11.
pashulka вне форума Ответить с цитированием
Старый 24.11.2015, 09:51   #8
who
Пользователь
 
Регистрация: 11.09.2014
Сообщений: 44
По умолчанию

Спасибо будем пробовать...
who вне форума Ответить с цитированием
Старый 25.11.2015, 09:19   #9
who
Пользователь
 
Регистрация: 11.09.2014
Сообщений: 44
По умолчанию

может тыкните носом в какой-нибудь мануальчик с перечнем и описанием команд VBA для работы с проектом VBA (я что-то не нашёл)? в частности меня интересует поиск номера строки с заданным текстом, и удаление этой строки.
who вне форума Ответить с цитированием
Старый 25.11.2015, 09:24   #10
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Частностный вариант поиска, сравнения и удаления.
http://programmersforum.ru/showpost....8&postcount=17

и еще
http://lmgtfy.com/?q=vba+excel%2C+%D...BE%D0%BA%D0%B8
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Присвоение кнопке Caption demiancz Общие вопросы Delphi 1 06.05.2013 12:01
программа для вычерчивания своего имени Mariy_19 Паскаль, Turbo Pascal, PascalABC.NET 7 22.12.2011 08:59
Присвоение цвета кнопке если на другом листе ячейка становится не пустой Energetik Microsoft Office Excel 10 10.03.2011 18:24
копирование макросом kursant95 Microsoft Office Excel 0 28.01.2011 15:12
Присвоение имени файлу в диалоге Beliyd Общие вопросы Delphi 3 05.09.2007 18:54