Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Генерация макроса макросом по кнопке - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Генерация макроса макросом по кнопке (Макросы/Sub)
Генерация макроса макросом по кнопке
Grell Дата: Среда, 12.04.2017, 23:43 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 113
Репутация: 0 ±
Замечаний: 60% ±

Excel 2007
Добрый вечер, форумчане.
Хочу обратиться с необычным вопросом.

Есть простой макрос поворота автофигуры. Макрос прикреплен к "Кнопке-1".
Его текст выглядит так:

[vba]
Код
    ActiveSheet.Shapes.Range(Array("Isosceles Triangle 1")).Select
    Selection.ShapeRange.IncrementRotation -9.85605
    Range("C12").Select
[/vba]

На листе - в ячейки J23, J24, J25 - вписаны текстовые строки другого похожего макроса.

Как макросом - при щелчке по "Кнопке-2" - переместить содержимое ячеек J23, J24, J25 в код "Макроса1" с заменой предыдущего содержания ?

То есть при щелчке на "Кнопку-2" текст, вписанный в ячейки J23, J24, J25
должен заместить текст - который сейчас вписан в код "Макроса1".
В общем суть в том, что при щелчке по "Кнопке-2" - код "Макроса1" - меняет свое содержимое.
К сообщению приложен файл: 546546.xls (46.0 Kb)
 
Ответить
СообщениеДобрый вечер, форумчане.
Хочу обратиться с необычным вопросом.

Есть простой макрос поворота автофигуры. Макрос прикреплен к "Кнопке-1".
Его текст выглядит так:

[vba]
Код
    ActiveSheet.Shapes.Range(Array("Isosceles Triangle 1")).Select
    Selection.ShapeRange.IncrementRotation -9.85605
    Range("C12").Select
[/vba]

На листе - в ячейки J23, J24, J25 - вписаны текстовые строки другого похожего макроса.

Как макросом - при щелчке по "Кнопке-2" - переместить содержимое ячеек J23, J24, J25 в код "Макроса1" с заменой предыдущего содержания ?

То есть при щелчке на "Кнопку-2" текст, вписанный в ячейки J23, J24, J25
должен заместить текст - который сейчас вписан в код "Макроса1".
В общем суть в том, что при щелчке по "Кнопке-2" - код "Макроса1" - меняет свое содержимое.

Автор - Grell
Дата добавления - 12.04.2017 в 23:43
_Boroda_ Дата: Четверг, 13.04.2017, 00:27 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16674
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Можно, конечно, и макрос макросом переписать, но зачем Вам этот изврат? Не проще поставить радиокнопки "По часовой" и "Против часовой"?
Посмотрите в файле
К сообщению приложен файл: 546546_1.xls (46.5 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеМожно, конечно, и макрос макросом переписать, но зачем Вам этот изврат? Не проще поставить радиокнопки "По часовой" и "Против часовой"?
Посмотрите в файле

Автор - _Boroda_
Дата добавления - 13.04.2017 в 00:27
Grell Дата: Четверг, 13.04.2017, 04:29 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 113
Репутация: 0 ±
Замечаний: 60% ±

Excel 2007
_Boroda_, суть вопроса была в том, чтобы переписать один макрос - другим макросом.

А как стрелку заставить крутить в другую сторону - это не проблема.


Сообщение отредактировал Grell - Четверг, 13.04.2017, 04:30
 
Ответить
Сообщение_Boroda_, суть вопроса была в том, чтобы переписать один макрос - другим макросом.

А как стрелку заставить крутить в другую сторону - это не проблема.

Автор - Grell
Дата добавления - 13.04.2017 в 04:29
Gustav Дата: Четверг, 13.04.2017, 08:58 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2731
Репутация: 1132 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
переписать один макрос - другим макросом.

Именно "переписать" - действительно довольно муторно. А вот на ходу создать новый в новом модуле, выполнить его и тут же удалить (и макрос, и модуль) - примерно вот так:
[vba]
Код
Option Explicit
    
'ВАЖНО: для успешности всего процесса следует включить "галочку" в меню Excel:
'Разработчик / Безопасность макросов/ Параметры макросов / опция "Доверять доступ к объкетной модели VBA" - устанавливаем!
    
'для использования в программе и получения информации о следующих объектах:
' -- в Excel перейти в редактор Visual Basic,
' -- в меню Tools/References подключить "галочкой" ссылку на
'    "Microsoft Visual Basic for Applications Extensibility 5.3"
'    (расположение на диске: C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB)
' -- в меню View/Object Browser (F2) порассматривать библиотеку VBIDE
    
Dim vbc     As VBComponents
Dim vbmdl   As VBComponent
Dim vbcode  As CodeModule
    
Sub runTemporarySub()
        
    '1. в текущей рабочей книге создаем новый модуль
    Set vbc = ThisWorkbook.VBProject.VBComponents
    Set vbmdl = vbc.Add(1)
    vbmdl.Name = "OurTemporaryModule"
    Set vbcode = vbmdl.CodeModule
        
    '2. добавляем строки кода новой процедуры в новый модуль
    addCodeLine "Sub newSub20170412()"
    addCodeLine "    MsgBox ""Привет из новой Sub"""
    addCodeLine "End Sub"
        
    '3. выполняем только что созданную процедуру
    Application.Run "newSub20170412"
        
    '4. удаляем только что созданный модуль
    vbmdl.Collection.Remove vbmdl
    
End Sub
    
Sub addCodeLine(codeText As String)
    vbcode.InsertLines vbcode.CountOfLines + 1, codeText
    'самый первый раз CountOfLines необходимо на тот случай,
    'если ваш Excel настроен на автоматическое добавление
    'оператора Option Explicit в новый модуль
End Sub
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
переписать один макрос - другим макросом.

Именно "переписать" - действительно довольно муторно. А вот на ходу создать новый в новом модуле, выполнить его и тут же удалить (и макрос, и модуль) - примерно вот так:
[vba]
Код
Option Explicit
    
'ВАЖНО: для успешности всего процесса следует включить "галочку" в меню Excel:
'Разработчик / Безопасность макросов/ Параметры макросов / опция "Доверять доступ к объкетной модели VBA" - устанавливаем!
    
'для использования в программе и получения информации о следующих объектах:
' -- в Excel перейти в редактор Visual Basic,
' -- в меню Tools/References подключить "галочкой" ссылку на
'    "Microsoft Visual Basic for Applications Extensibility 5.3"
'    (расположение на диске: C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB)
' -- в меню View/Object Browser (F2) порассматривать библиотеку VBIDE
    
Dim vbc     As VBComponents
Dim vbmdl   As VBComponent
Dim vbcode  As CodeModule
    
Sub runTemporarySub()
        
    '1. в текущей рабочей книге создаем новый модуль
    Set vbc = ThisWorkbook.VBProject.VBComponents
    Set vbmdl = vbc.Add(1)
    vbmdl.Name = "OurTemporaryModule"
    Set vbcode = vbmdl.CodeModule
        
    '2. добавляем строки кода новой процедуры в новый модуль
    addCodeLine "Sub newSub20170412()"
    addCodeLine "    MsgBox ""Привет из новой Sub"""
    addCodeLine "End Sub"
        
    '3. выполняем только что созданную процедуру
    Application.Run "newSub20170412"
        
    '4. удаляем только что созданный модуль
    vbmdl.Collection.Remove vbmdl
    
End Sub
    
Sub addCodeLine(codeText As String)
    vbcode.InsertLines vbcode.CountOfLines + 1, codeText
    'самый первый раз CountOfLines необходимо на тот случай,
    'если ваш Excel настроен на автоматическое добавление
    'оператора Option Explicit в новый модуль
End Sub
[/vba]

Автор - Gustav
Дата добавления - 13.04.2017 в 08:58
_Boroda_ Дата: Четверг, 13.04.2017, 10:26 | Сообщение № 5
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16674
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
_Boroda_, суть вопроса была в том, чтобы переписать один макрос - другим макросом.

Ну уж простите пожалуйста. Я почему-то здесь привык отвечать не по букве, а по духу вопроса, что в большинстве случаев спрашивающему и нужно
Хотите макрос переписать? Ну держите код для второй кнопки
[vba]
Код
    For i = 1 To 3
        ActiveWorkbook.VBProject.VBComponents(1).CodeModule.ReplaceLine i + 1, Range("J" & 22 + i)
    Next i
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
_Boroda_, суть вопроса была в том, чтобы переписать один макрос - другим макросом.

Ну уж простите пожалуйста. Я почему-то здесь привык отвечать не по букве, а по духу вопроса, что в большинстве случаев спрашивающему и нужно
Хотите макрос переписать? Ну держите код для второй кнопки
[vba]
Код
    For i = 1 To 3
        ActiveWorkbook.VBProject.VBComponents(1).CodeModule.ReplaceLine i + 1, Range("J" & 22 + i)
    Next i
[/vba]

Автор - _Boroda_
Дата добавления - 13.04.2017 в 10:26
Grell Дата: Четверг, 13.04.2017, 13:28 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 113
Репутация: 0 ±
Замечаний: 60% ±

Excel 2007
_Boroda_, Gustav, спасибо.
Буде разбираться.
 
Ответить
Сообщение_Boroda_, Gustav, спасибо.
Буде разбираться.

Автор - Grell
Дата добавления - 13.04.2017 в 13:28
Gustav Дата: Пятница, 14.04.2017, 13:17 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2731
Репутация: 1132 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
на ходу создать новый в новом модуле, выполнить его и тут же удалить (и макрос, и модуль)

А можно еще проще - с использованием ActiveX-компонента MS Script Control:
[vba]
Код
Sub runDynamicOperator()
    With CreateObject("ScriptControl")
        .Language = "vbscript"
        .AddObject "xlApp", Excel.Application
        .ExecuteStatement "xlApp.Range(""C4"").Value = ""ПРИВЕТ из динамического оператора"""
    End With
End Sub
[/vba]
На форуме есть хорошая тема, посвященная этому объекту.

P.S. Поскольку MS Script Control является 32-битным компонентом, то данный макрос может не работать в 64-битной среде (Windows, Excel). К счастью, сторонним производителем уже создана 64-битная версия Script Control - не под маркой MS, но под маркой Tablacus. Компонент следует установить на компьютере, скачав отсюда, после чего запустить макрос, и что приятно, ничего в нём не меняя.


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Пятница, 14.04.2017, 22:36
 
Ответить
Сообщение
на ходу создать новый в новом модуле, выполнить его и тут же удалить (и макрос, и модуль)

А можно еще проще - с использованием ActiveX-компонента MS Script Control:
[vba]
Код
Sub runDynamicOperator()
    With CreateObject("ScriptControl")
        .Language = "vbscript"
        .AddObject "xlApp", Excel.Application
        .ExecuteStatement "xlApp.Range(""C4"").Value = ""ПРИВЕТ из динамического оператора"""
    End With
End Sub
[/vba]
На форуме есть хорошая тема, посвященная этому объекту.

P.S. Поскольку MS Script Control является 32-битным компонентом, то данный макрос может не работать в 64-битной среде (Windows, Excel). К счастью, сторонним производителем уже создана 64-битная версия Script Control - не под маркой MS, но под маркой Tablacus. Компонент следует установить на компьютере, скачав отсюда, после чего запустить макрос, и что приятно, ничего в нём не меняя.

Автор - Gustav
Дата добавления - 14.04.2017 в 13:17
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Генерация макроса макросом по кнопке (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!