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

Вход

Регистрация

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

 

= Мир MS Excel/Оператор Call для последовательного выполниня макросов - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Оператор Call для последовательного выполниня макросов (Макросы/Sub)
Оператор Call для последовательного выполниня макросов
selles-2013 Дата: Четверг, 17.11.2022, 14:12 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Есть проблема. Она не критическая, но мешает. Макросы для примера написаны макрорекордером, с небольшими дополнениями. Пример упрощен.

Использование (вовлечение в работу) макросов одного за одним (по своего рода "списку") может решать много задач. Но есть задача, когда после исполнения одного макроса (подстановки) нужен временной перерыв. В прилагаемом примере временной перерыв достигается включением в код функции "MsgBox", и вывода соответствующего сообщения об исполнении макроса.

В примере с «Кнопкой 1» макросы исполняются один за другим беспрерывно.
В примере с «Кнопкой 2» макросы исполняются один за другим, но прерываются выводом текстового сообщения (задействование функции "MsgBox") с кнопкой "Ок".

Суть проблемы в том, что это сообщение закрывает часть объекта. Можно отодвинуть его в любой угол окна. Но при повторном нажатии "Ок" - сообщения возвращается в середину экрана. Можно ли как-то зафиксировать это сообщение с кнопкой "Ок", поместив его в угол, перетащив его туда один раз.

Или, что намного лучше, включить в код процедуру "отсечения" первого нажатия "Кнопки 1" от второго (и последующего) нажатия. Другими словами, нужно чтобы при нажатии "Кнопки 1" исполнялся первый макрос, при следующем нажатии этой же "Кнопки 1" исполнялся следующий макрос. Прилагаю последний фрагмент кода для "Кнопки 1":
[vba]
Код
Sub Команда_13()
' Макрос 3 для Кнопки 1
'
    Application.ScreenUpdating = False
    Range("I7").Select
    Selection.Copy
    Range("E7").Select
    ActiveSheet.Paste
    Application.ScreenUpdating = True
    Application.CutCopyMode = False
End Sub
Sub Main_1()
' установлена очередность исполнения маркосов (Команд_: 1,2,3). Назначение Кнопки 1.
'
Call Команда_11
Call Команда_12
Call Команда_13
End Sub
[/vba]
Прилагаю файл:
К сообщению приложен файл: _3.xlsm (25.7 Kb)


Сообщение отредактировал selles-2013 - Четверг, 17.11.2022, 14:15
 
Ответить
СообщениеЕсть проблема. Она не критическая, но мешает. Макросы для примера написаны макрорекордером, с небольшими дополнениями. Пример упрощен.

Использование (вовлечение в работу) макросов одного за одним (по своего рода "списку") может решать много задач. Но есть задача, когда после исполнения одного макроса (подстановки) нужен временной перерыв. В прилагаемом примере временной перерыв достигается включением в код функции "MsgBox", и вывода соответствующего сообщения об исполнении макроса.

В примере с «Кнопкой 1» макросы исполняются один за другим беспрерывно.
В примере с «Кнопкой 2» макросы исполняются один за другим, но прерываются выводом текстового сообщения (задействование функции "MsgBox") с кнопкой "Ок".

Суть проблемы в том, что это сообщение закрывает часть объекта. Можно отодвинуть его в любой угол окна. Но при повторном нажатии "Ок" - сообщения возвращается в середину экрана. Можно ли как-то зафиксировать это сообщение с кнопкой "Ок", поместив его в угол, перетащив его туда один раз.

Или, что намного лучше, включить в код процедуру "отсечения" первого нажатия "Кнопки 1" от второго (и последующего) нажатия. Другими словами, нужно чтобы при нажатии "Кнопки 1" исполнялся первый макрос, при следующем нажатии этой же "Кнопки 1" исполнялся следующий макрос. Прилагаю последний фрагмент кода для "Кнопки 1":
[vba]
Код
Sub Команда_13()
' Макрос 3 для Кнопки 1
'
    Application.ScreenUpdating = False
    Range("I7").Select
    Selection.Copy
    Range("E7").Select
    ActiveSheet.Paste
    Application.ScreenUpdating = True
    Application.CutCopyMode = False
End Sub
Sub Main_1()
' установлена очередность исполнения маркосов (Команд_: 1,2,3). Назначение Кнопки 1.
'
Call Команда_11
Call Команда_12
Call Команда_13
End Sub
[/vba]
Прилагаю файл:

Автор - selles-2013
Дата добавления - 17.11.2022 в 14:12
_Boroda_ Дата: Четверг, 17.11.2022, 14:23 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А что не хотите на кнопку писать название (или описание) макроса, который сейчас должен запуститься? При нажатии кнопки считывается ее текст и запускается соответствующий макрос. И пользователю понятнее будет, что сейчас от запустит, если нажмет


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

Автор - _Boroda_
Дата добавления - 17.11.2022 в 14:23
Nic70y Дата: Четверг, 17.11.2022, 14:48 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 8759
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код
Sub u_783()
    u = Sheets("Лист1").Buttons("Button 2").Text
    Application.Run u
    If u = "Команда_21" Then
        Sheets("Лист1").Buttons("Button 2").Text = "Команда_22"
    ElseIf u = "Команда_22" Then Sheets("Лист1").Buttons("Button 2").Text = "Команда_23"
    ElseIf u = "Команда_23" Then Sheets("Лист1").Buttons("Button 2").Text = "Команда_21"
    End If
End Sub
[/vba]
К сообщению приложен файл: 69.xlsm (21.7 Kb)


ЮMoney 41001841029809
 
Ответить
Сообщение[vba]
Код
Sub u_783()
    u = Sheets("Лист1").Buttons("Button 2").Text
    Application.Run u
    If u = "Команда_21" Then
        Sheets("Лист1").Buttons("Button 2").Text = "Команда_22"
    ElseIf u = "Команда_22" Then Sheets("Лист1").Buttons("Button 2").Text = "Команда_23"
    ElseIf u = "Команда_23" Then Sheets("Лист1").Buttons("Button 2").Text = "Команда_21"
    End If
End Sub
[/vba]

Автор - Nic70y
Дата добавления - 17.11.2022 в 14:48
_Boroda_ Дата: Четверг, 17.11.2022, 15:04 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Да, как-то так
Или так, что, в общем-то, аналогично
[vba]
Код
Sub ttt()
    tkn_ = Sheets("sh1").Buttons("Button 2").Text
    Application.Run tkn_
    razd_ = "_"
    spl_ = Split(tkn_, razd_)
    If spl_(1) = "23" Then
        tkn_ = spl_(0) & razd_ & 1
    Else
        tkn_ = spl_(0) & razd_ & spl_(1) + 1
    End If
    Sheets("sh1").Buttons("Button 2").Text = tkn_
End Sub
[/vba]

Можно еще Application.Caller присобачить, чтобы вообще один макрос на все кнопки повесить, но это уже другой вопрос


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеДа, как-то так
Или так, что, в общем-то, аналогично
[vba]
Код
Sub ttt()
    tkn_ = Sheets("sh1").Buttons("Button 2").Text
    Application.Run tkn_
    razd_ = "_"
    spl_ = Split(tkn_, razd_)
    If spl_(1) = "23" Then
        tkn_ = spl_(0) & razd_ & 1
    Else
        tkn_ = spl_(0) & razd_ & spl_(1) + 1
    End If
    Sheets("sh1").Buttons("Button 2").Text = tkn_
End Sub
[/vba]

Можно еще Application.Caller присобачить, чтобы вообще один макрос на все кнопки повесить, но это уже другой вопрос

Автор - _Boroda_
Дата добавления - 17.11.2022 в 15:04
selles-2013 Дата: Четверг, 17.11.2022, 15:11 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

А что не хотите на кнопку писать название (или описание) макроса, который сейчас должен запуститься? При нажатии кнопки считывается ее текст и запускается соответствующий макрос. И пользователю понятнее будет, что сейчас от запустит, если нажмет

Да кабы я знал, что такое возможно. Спасибо за идею.

Спасибо Экселисту, за воплощение этой идеи.

Брагодарю вас. Посмотрю, как идея пойдет в основной программе. И Ваш код посмотрю


Сообщение отредактировал selles-2013 - Четверг, 17.11.2022, 15:15
 
Ответить
Сообщение
А что не хотите на кнопку писать название (или описание) макроса, который сейчас должен запуститься? При нажатии кнопки считывается ее текст и запускается соответствующий макрос. И пользователю понятнее будет, что сейчас от запустит, если нажмет

Да кабы я знал, что такое возможно. Спасибо за идею.

Спасибо Экселисту, за воплощение этой идеи.

Брагодарю вас. Посмотрю, как идея пойдет в основной программе. И Ваш код посмотрю

Автор - selles-2013
Дата добавления - 17.11.2022 в 15:11
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Оператор Call для последовательного выполниня макросов (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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