Есть проблема. Она не критическая, но мешает. Макросы для примера написаны макрорекордером, с небольшими дополнениями. Пример упрощен.
Использование (вовлечение в работу) макросов одного за одним (по своего рода "списку") может решать много задач. Но есть задача, когда после исполнения одного макроса (подстановки) нужен временной перерыв. В прилагаемом примере временной перерыв достигается включением в код функции "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] Прилагаю файл:
Есть проблема. Она не критическая, но мешает. Макросы для примера написаны макрорекордером, с небольшими дополнениями. Пример упрощен.
Использование (вовлечение в работу) макросов одного за одним (по своего рода "списку") может решать много задач. Но есть задача, когда после исполнения одного макроса (подстановки) нужен временной перерыв. В прилагаемом примере временной перерыв достигается включением в код функции "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
А что не хотите на кнопку писать название (или описание) макроса, который сейчас должен запуститься? При нажатии кнопки считывается ее текст и запускается соответствующий макрос. И пользователю понятнее будет, что сейчас от запустит, если нажмет
А что не хотите на кнопку писать название (или описание) макроса, который сейчас должен запуститься? При нажатии кнопки считывается ее текст и запускается соответствующий макрос. И пользователю понятнее будет, что сейчас от запустит, если нажмет_Boroda_
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]
[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
А что не хотите на кнопку писать название (или описание) макроса, который сейчас должен запуститься? При нажатии кнопки считывается ее текст и запускается соответствующий макрос. И пользователю понятнее будет, что сейчас от запустит, если нажмет
Да кабы я знал, что такое возможно. Спасибо за идею.
Спасибо Экселисту, за воплощение этой идеи.
Брагодарю вас. Посмотрю, как идея пойдет в основной программе. И Ваш код посмотрю
А что не хотите на кнопку писать название (или описание) макроса, который сейчас должен запуститься? При нажатии кнопки считывается ее текст и запускается соответствующий макрос. И пользователю понятнее будет, что сейчас от запустит, если нажмет
Да кабы я знал, что такое возможно. Спасибо за идею.
Спасибо Экселисту, за воплощение этой идеи.
Брагодарю вас. Посмотрю, как идея пойдет в основной программе. И Ваш код посмотрюselles-2013
Сообщение отредактировал selles-2013 - Четверг, 17.11.2022, 15:15