Страницы: 1
RSS
запуск нескольких макросов при нажатии кнопки
 
в книге 3 макроса(условно "мак1","мак2","мак3")и несколько кнопок.  
нужно чтобы при нажатии на первую кнопку выполнялся    
сначала "мак1",    
потом "мак2",    
потом "мак3",    
а на второй кнопке чтобы выполнялся    
сначала "мак3",    
потом "мак1",    
потом "мак2"  
возможно???
 
вставляйте кнопку ActiveX там это проще пареной репы
 
{quote}{login=bandanas}{date=27.02.2010 05:46}{thema=запуск нескольких макросов при нажатии кнопки}{post}в книге 3 макроса(условно "мак1","мак2","мак3")и несколько кнопок.  
нужно чтобы при нажатии на первую кнопку выполнялся    
сначала "",    
потом "мак2",    
потом "мак3",    
а на второй кнопке чтобы выполнялся    
сначала "мак3",    
потом "мак1",    
потом "мак2"  
возможно???{/post}{/quote}  
Sub первая_кнопка  
й:мак1:мак2:мак3  
End Sub  
Sub вторая_кнопка  
й:мак3:мак2:мак1  
End Sub
 
{quote}{login=тол}{date=27.02.2010 06:25}{thema=Re: запуск нескольких макросов при нажатии кнопки}{post}{quote}{login=bandanas}{date=27.02.2010 05:46}{thema=запуск нескольких макросов при нажатии кнопки}{post}в книге 3 макроса(условно "мак1","мак2","мак3")и несколько кнопок.  
нужно чтобы при нажатии на первую кнопку выполнялся    
сначала "",    
потом "мак2",    
потом "мак3",    
а на второй кнопке чтобы выполнялся    
сначала "мак3",    
потом "мак1",    
потом "мак2"  
возможно???{/post}{/quote}  
Sub первая_кнопка  
й:мак1:мак2:мак3  
End Sub  
Sub вторая_кнопка  
й:мак3:мак2:мак1  
End Sub{/post}{/quote}  
 
Ребятки, а какж ебыть тогда, когда необходимо запустить два макроса ОДНОЙ кнопкой, причем макросы находятся на разных листах (Лист1 и Лист2) ???  
 
И второе, а что означает "й" в начале строки в приведенном примере (й:мак1:мак2:мак3) ???
 
Так будет более понятно:  
Sub MacroMain()  
Call Макрос1  
Call Макрос2  
Call Макрос3  
end sub  
будут поочерёдно выполнены три макроса в указанном порядке.
 
Если на листах - укажите имя листа: Sheets("Лист1").Макрос1 и т.д.
 
{quote}{login=Юрий М}{date=27.11.2010 08:41}{thema=}{post}Если на листах - укажите имя листа: Sheets("Лист1").Макрос1 и т.д.{/post}{/quote}  
Спасибо, но вот это НЕ проходит:  
 
Private Sub CommandButton1_Click()  
Call Sheets("Лист1").Макрос1  
Call Sheets("Лист2").Макрос1  
End Sub  
 
... выдает ошибку уже на первом макросе...
 
Не могут два макроса "обзываться" одинаково.
 
{quote}{login=Юрий М}{date=27.11.2010 08:52}{thema=}{post}Не могут два макроса "обзываться" одинаково.{/post}{/quote}  
Дело в том, что я их создавал через:  
- закладка листа;  
- клик правой кнопкой;  
- исходный текст;  
- имена я не задавал, они самостоятельно присваивались, сначала одному макросу, затем второму и, оба назвали себя Макрос1 ... Вот
 
Private Sub CommandButton1_Click()  
Call Макрос1  
End Sub  
 
Вот так работает только первый и задание выполняется, а как запустить второй не знаю ..
 
Ну так переименуйте макрос на втором листе в Макрос2
 
Дим, я про родителей автору писал :-)
 
Спасибо The_Prist, спасибо Юрий, НО дошло до смешного. Я перепробовал сейчас все ваши советы, срабатывает почему-то только первый, на втором он останавливается ...  
Решил вернуть эти макросы на свои места, т. е. каждый на свой модуль листа ... получается запускать их только по раздельности ...    
пробовал и так:  
 
Private Sub CommandButton1_Click()  
Call Макрос1  
Call Sheets("Продажа ТО с ZP").Макрос2  
End Sub  
 
и так:  
 
Private Sub CommandButton1_Click()  
Call Макрос1  
Call Лист2.Макрос2  
End Sub  
 
и эдак:    
 
Private Sub CommandButton1_Click()  
Call Макрос1  
Call Макрос2  
End Sub  
 
Результат один - НЕТ ...
 
И вот так не работает?  
Private Sub CommandButton1_Click()  
Call Sheets("Лист1").Макрос1  
Call Sheets("Лист2").Макрос2  
End Sub  
 
На втором листе макрос должен иметь именно такое имя!!!  
Или давайте Ваш файл.
 
{quote}{login=The_Prist}{date=27.11.2010 09:37}{thema=}{post}И что же у Вас в самих макросах написано не подскажете? Я так подозреваю что-то, что не дает выполнить до конца макрос, а завершает все процедуры. Что-то вроде команды End{/post}{/quote}  
... это модуль первого листа:  
Option Explicit  
 
Sub Макрос1() ' для копирования обновленного перечня учреждений из основной книги  
Dim TempWb As Workbook  
Dim BazaSht As Worksheet  
Dim iPath As String  
   With Application  
       .ScreenUpdating = False  
       .Calculation = xlCalculationManual  
       Set BazaSht = Sheets("Продажа ZP")  
       iPath = ActiveWorkbook.Path & "\"  
       Set TempWb = Workbooks.Open(Filename:=iPath & "Продажи-Статистика_2011.xlsm", UpdateLinks:=False, ReadOnly:=True)  
       TempWb.Sheets("Продажа ZP").Range("A3:F555").Copy Destination:=BazaSht.Range("A3")  
       TempWb.Close saveChanges:=False  
       .Calculation = xlAutomatic  
       .ScreenUpdating = True  
   End With  
   Columns("B:D").Select  
   Selection.Copy  
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _  
       :=False, Transpose:=False  
   Application.CutCopyMode = False  
   Range("B442").Select  
   MsgBox "Данные обновлены из файла Продажи-Статистика!", 64, "Копирование"  
End Sub  
 
Private Sub CommandButton1_Click()  
Call Макрос1  
Call Sheets("Продажа ТО с ZP").Макрос2  
End Sub  
 
 
 
... это модуль второго листа:    
 
Option Explicit  
 
Sub Макрос2() ' для копирования обновленного перечня учреждений из основной книги  
Dim TempWb As Workbook  
Dim BazaSht As Worksheet  
Dim iPath As String  
   With Application  
       .ScreenUpdating = False  
       .Calculation = xlCalculationManual  
       Set BazaSht = Sheets("Продажа ТО с ZP")  
       iPath = ActiveWorkbook.Path & "\"  
       Set TempWb = Workbooks.Open(Filename:=iPath & "Продажи-Статистика_2011.xlsm", UpdateLinks:=False, ReadOnly:=True)  
       TempWb.Sheets("Продажа ТО с ZP").Range("A3:f555").Copy Destination:=BazaSht.Range("A3")  
       TempWb.Close saveChanges:=False  
       .Calculation = xlAutomatic  
       .ScreenUpdating = True  
   End With  
   Columns("B:D").Select  
   Selection.Copy  
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _  
       :=False, Transpose:=False  
   Application.CutCopyMode = False  
   Range("B105").Select  
   MsgBox "Перечень учреждений обновлен из файла Продажи-Статистика!", 64, "Копирование"  
End Sub  
 
... я не большой знаток, только пока пытаюсь разобраться ...
 
{quote}{login=Юрий М}{date=27.11.2010 09:38}{thema=}{post}И вот так не работает?  
Private Sub CommandButton1_Click()  
Call Sheets("Лист1").Макрос1  
Call Sheets("Лист2").Макрос2  
End Sub  
 
На втором листе макрос должен иметь именно такое имя!!!  
Или давайте Ваш файл.{/post}{/quote}  
Юрий, когда я вставляю вот такой код в стандартный модуль:  
Private Sub CommandButton1_Click()  
Call Sheets("Лист1").Макрос1  
Call Sheets("Лист2").Макрос2  
End Sub  
 
... то кнопка у меня вообще не реагирует.  
Когда я вставляю этот же код в модуль первого листа, то срабатывает только макрос1, на втором выдает ошибку.  
Сейчас попробую кнопку вывести на второй лист и запуститься оттуда ...
 
Раз уж Вы хотите макросы в модулях листов (зачем?), то посмотрите рабочий вариант.
 
А лучше прислушайтесь к совет Prist - оба макроса в стандартный модуль. Тогда не придётся указывать явно лист. См. пример.
 
{quote}{login=Юрий М}{date=27.11.2010 09:53}{thema=}{post}Раз уж Вы хотите макросы в модулях листов (зачем?), то посмотрите рабочий вариант.{/post}{/quote}  
Большое Вам спасибо Юрий, я вроде бы разобрался, дело не в кнопке, а вот в этом:  
iPath = ActiveWorkbook.Path & "\"  
Set TempWb = Workbooks.Open(Filename:=iPath & "Продажи-Статистика_2011.xlsm", UpdateLinks:=False, ReadOnly:=True)  
TempWb.Sheets("Продажа ZP").Range("A3:F555").Copy Destination:=BazaSht.Range("A3")  
 
... здесь речь идет об активном листе, а у меня активным является только первый, так как кнопка находится на первом листе ... предполагаю, что появилось новое препятствие ... ((
 
Вопрос был о том, как запустить два макроса последовательно. Чтобы не оглядываться на кнопку на активном листе, назначьте макрос любой автофигуре, рисунку... (правый клик на ней - назначить макрос). Этот макрос может выглядеть так:  
Sub Main()  
Call Макрос1  
Call Макрос2  
End sub  
При этом все макросы в стандартном модуле. См. пример.
 
Спасибо Юрий и другим ребятам тоже выражаю благодарность за участие в разборе.  
Вы верно направляли меня на путь истинный, однако проблема у меня была по другой причине.    
The_Prist правильно определил, скорее всего ошибка в самом коде макросов, запускаемых одной кнопкой. Дело в том, что они работают только с активным листом и, в моем случае активным был только первый (в этом я разобрался только сегодня).  
 
С каждым часом у меня назревают все новые препятствия, благодаря Вам мне удается их преодолевать. СПАСИБО !!! (до встречи в следующей теме)
 
{quote}{login=}{date=28.11.2010 11:41}{thema=Благодарность}{post}Спасибо Юрий и другим ребятам тоже выражаю благодарность за участие в разборе.  
Вы верно направляли меня на путь истинный, однако проблема у меня была по другой причине.    
The_Prist правильно определил, скорее всего ошибка в самом коде макросов, запускаемых одной кнопкой. Дело в том, что они работают только с активным листом и, в моем случае активным был только первый (в этом я разобрался только сегодня).  
 
С каждым часом у меня назревают все новые препятствия, благодаря Вам мне удается их преодолевать. СПАСИБО !!! (до встречи в следующей теме){/post}{/quote}  
 
Извините, разлогинился. Эти благодарности от меня!
Страницы: 1
Читают тему
Наверх