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

Вход

Регистрация

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

 

= Мир MS Excel/Запуск макроса из выпадающего списка - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Запуск макроса из выпадающего списка (Макросы/Sub)
Запуск макроса из выпадающего списка
maxexcel Дата: Четверг, 22.10.2015, 19:24 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 26
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Всем привет! Копался по многим ссылкам, но так ничего похожего и не нашел(((.
Суть такова. Имеются два макроса. Макрос 1 и Макрос 2. Как сделать так, чтобы эти макросы запускались из выпадающего списка, соответственно кликая на выбранный. Т.е. в моей рабочей книге более 10 макросов. Каждому макросу назначена кнопка. И получается по 10 кнопок на каждом листе. А листов тоже не мало. А так будет всего одна кнопка. На нее нажимаешь, раскрывается список макросов, выбираешь, кликаешь, и все. Файл прилагаю. И картинку.
К сообщению приложен файл: 0223884.xlsm (18.8 Kb) · 7262691.jpg (15.5 Kb)


Сообщение отредактировал maxexcel - Четверг, 22.10.2015, 19:44
 
Ответить
СообщениеВсем привет! Копался по многим ссылкам, но так ничего похожего и не нашел(((.
Суть такова. Имеются два макроса. Макрос 1 и Макрос 2. Как сделать так, чтобы эти макросы запускались из выпадающего списка, соответственно кликая на выбранный. Т.е. в моей рабочей книге более 10 макросов. Каждому макросу назначена кнопка. И получается по 10 кнопок на каждом листе. А листов тоже не мало. А так будет всего одна кнопка. На нее нажимаешь, раскрывается список макросов, выбираешь, кликаешь, и все. Файл прилагаю. И картинку.

Автор - maxexcel
Дата добавления - 22.10.2015 в 19:24
Nic70y Дата: Четверг, 22.10.2015, 19:46 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 8759
Репутация: 2272 ±
Замечаний: 0% ±

Excel 2010
вариант с проверкой данных -> список
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("l13")) Is Nothing Then
    Application.Run Cells(13, 12).Value
End If
End Sub
[/vba]
К сообщению приложен файл: 2915503.xlsm (20.6 Kb)


ЮMoney 41001841029809
 
Ответить
Сообщениевариант с проверкой данных -> список
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("l13")) Is Nothing Then
    Application.Run Cells(13, 12).Value
End If
End Sub
[/vba]

Автор - Nic70y
Дата добавления - 22.10.2015 в 19:46
maxexcel Дата: Четверг, 22.10.2015, 20:04 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 26
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Да, вариант не плохой.
Но еще если бы названия макросов в выпадающем списке можно было именовать. Т.е. не "Макрос 1", а "Окрасить ячейку в желтый цвет". Когда я работал над остальными макросами, т.е. я имею в виду свою книгу, я называл их по свойски, а моей книгой будут пользоваться и другие пользователи. Да, можно конечно переименовать свои макросы, но эти названия уже имеют много завязок, что буду сидеть два дня и где-нибудь точно ошибусь)))))))))))).


Сообщение отредактировал maxexcel - Четверг, 22.10.2015, 20:04
 
Ответить
СообщениеДа, вариант не плохой.
Но еще если бы названия макросов в выпадающем списке можно было именовать. Т.е. не "Макрос 1", а "Окрасить ячейку в желтый цвет". Когда я работал над остальными макросами, т.е. я имею в виду свою книгу, я называл их по свойски, а моей книгой будут пользоваться и другие пользователи. Да, можно конечно переименовать свои макросы, но эти названия уже имеют много завязок, что буду сидеть два дня и где-нибудь точно ошибусь)))))))))))).

Автор - maxexcel
Дата добавления - 22.10.2015 в 20:04
Nic70y Дата: Четверг, 22.10.2015, 20:23 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 8759
Репутация: 2272 ±
Замечаний: 0% ±

Excel 2010
как-то так, хотя думаю можно изящней, ну как умею...
К сообщению приложен файл: 2915503-1-.xlsm (21.1 Kb)


ЮMoney 41001841029809
 
Ответить
Сообщениекак-то так, хотя думаю можно изящней, ну как умею...

Автор - Nic70y
Дата добавления - 22.10.2015 в 20:23
maxexcel Дата: Четверг, 22.10.2015, 20:47 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 26
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Спасибо!
 
Ответить
СообщениеСпасибо!

Автор - maxexcel
Дата добавления - 22.10.2015 в 20:47
maxexcel Дата: Понедельник, 26.10.2015, 09:11 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 26
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Ребят, может кто-нибудь сталкивался с таким. А то и правда, на каждом листе в ячейках писать наименование и формулу прописывать для выпадающего списка. Если бы внутрь макроса это запихнуть.
 
Ответить
СообщениеРебят, может кто-нибудь сталкивался с таким. А то и правда, на каждом листе в ячейках писать наименование и формулу прописывать для выпадающего списка. Если бы внутрь макроса это запихнуть.

Автор - maxexcel
Дата добавления - 26.10.2015 в 09:11
Manyasha Дата: Понедельник, 26.10.2015, 10:56 | Сообщение № 7
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
maxexcel, а можно макросы сразу называть понятными именами, и в L13 записать список макросов модуля:
[vba]
Код
Private Sub Worksheet_Activate()
    Dim oVBComponent As Object
    Dim strList$: strList = ""
    For Each oVBComponent In ActiveWorkbook.VBProject.VBComponents
        With oVBComponent
            If .Type = 1 Then
                With oVBComponent.CodeModule
                    For i = 1 To .CountOfLines
                        If InStr(1, .Lines(i, 1), "Sub ") And InStr(1, .Lines(i, 1), "Exit ") = 0 Then
                            strList = strList & ", " & Replace(Replace(.Lines(i, 1), "Sub ", ""), "()", "")
                        End If
                    Next i
                End With
            End If
        End With
    Next
    Set oVBComponent = Nothing
    strList = Mid(strList, 3)
    With Range("l13").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=strList
    End With
End Sub
[/vba]
К сообщению приложен файл: 2915503-2-.xlsm (24.9 Kb)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеmaxexcel, а можно макросы сразу называть понятными именами, и в L13 записать список макросов модуля:
[vba]
Код
Private Sub Worksheet_Activate()
    Dim oVBComponent As Object
    Dim strList$: strList = ""
    For Each oVBComponent In ActiveWorkbook.VBProject.VBComponents
        With oVBComponent
            If .Type = 1 Then
                With oVBComponent.CodeModule
                    For i = 1 To .CountOfLines
                        If InStr(1, .Lines(i, 1), "Sub ") And InStr(1, .Lines(i, 1), "Exit ") = 0 Then
                            strList = strList & ", " & Replace(Replace(.Lines(i, 1), "Sub ", ""), "()", "")
                        End If
                    Next i
                End With
            End If
        End With
    Next
    Set oVBComponent = Nothing
    strList = Mid(strList, 3)
    With Range("l13").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=strList
    End With
End Sub
[/vba]

Автор - Manyasha
Дата добавления - 26.10.2015 в 10:56
МВТ Дата: Понедельник, 26.10.2015, 10:59 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 476
Репутация: 137 ±
Замечаний: 0% ±

Excel 2007
Я бы сделал так: создаете на скрытом листе умную таблицу из двух колонок. В первой пишете название для выпадающего списка, во второй - имя соответствующего макроса. К обеим колонкам можно обращаться как к именованным диапазонам. Далее макрос считывает название пункта меню и при помощи VLookUp выбирает имя макроса.
 
Ответить
СообщениеЯ бы сделал так: создаете на скрытом листе умную таблицу из двух колонок. В первой пишете название для выпадающего списка, во второй - имя соответствующего макроса. К обеим колонкам можно обращаться как к именованным диапазонам. Далее макрос считывает название пункта меню и при помощи VLookUp выбирает имя макроса.

Автор - МВТ
Дата добавления - 26.10.2015 в 10:59
maxexcel Дата: Понедельник, 26.10.2015, 21:44 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 26
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Manyasha, к сожалению в моем файле много завязок на мои имена. Долго буду переименовывать)). А за макрос спасибо буду иметь в виду.
 
Ответить
СообщениеManyasha, к сожалению в моем файле много завязок на мои имена. Долго буду переименовывать)). А за макрос спасибо буду иметь в виду.

Автор - maxexcel
Дата добавления - 26.10.2015 в 21:44
maxexcel Дата: Понедельник, 26.10.2015, 22:49 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 26
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
МВТ,
Цитата
макрос считывает название пункта меню

Это не понял, можно подробнее.
 
Ответить
СообщениеМВТ,
Цитата
макрос считывает название пункта меню

Это не понял, можно подробнее.

Автор - maxexcel
Дата добавления - 26.10.2015 в 22:49
Wasilich Дата: Среда, 28.10.2015, 11:19 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
На любом листе (можно и отдельный выделить, например "имена"), делаем список желаемых наименований макросов.
На рабочем листе вставляем форму "выпадающий список", указываем ему "Связь с ячейкой" в которой будет отображаться номер пункта меню. Назначаем форме отдельный макрос в котором, в зависимости от номера пункта меню (в ячейке связи) через Case запускается нужный макрос. Как то так, наверное.
ЗЫ: Форму просто копируем на нужные листы.
К сообщению приложен файл: max.xls (36.0 Kb)


Сообщение отредактировал Wasilic - Среда, 28.10.2015, 11:27
 
Ответить
СообщениеНа любом листе (можно и отдельный выделить, например "имена"), делаем список желаемых наименований макросов.
На рабочем листе вставляем форму "выпадающий список", указываем ему "Связь с ячейкой" в которой будет отображаться номер пункта меню. Назначаем форме отдельный макрос в котором, в зависимости от номера пункта меню (в ячейке связи) через Case запускается нужный макрос. Как то так, наверное.
ЗЫ: Форму просто копируем на нужные листы.

Автор - Wasilich
Дата добавления - 28.10.2015 в 11:19
Roman777 Дата: Среда, 28.10.2015, 11:37 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
[offtop] Wasilic, подскажите, а почему при исполнении макроса кнопкой цвета меняются мгновенно. А при выборе списком - плавно меняются цвета...?[/offtop]


Много чего не знаю!!!!
 
Ответить
Сообщение[offtop] Wasilic, подскажите, а почему при исполнении макроса кнопкой цвета меняются мгновенно. А при выборе списком - плавно меняются цвета...?[/offtop]

Автор - Roman777
Дата добавления - 28.10.2015 в 11:37
Wasilich Дата: Среда, 28.10.2015, 12:04 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
почему при исполнении макроса кнопкой цвета меняются мгновенно. А при выборе списком - плавно меняются цвета...?
%) Я у себя такого не наблюдаю. Может из-за версии экса.
 
Ответить
Сообщение
почему при исполнении макроса кнопкой цвета меняются мгновенно. А при выборе списком - плавно меняются цвета...?
%) Я у себя такого не наблюдаю. Может из-за версии экса.

Автор - Wasilich
Дата добавления - 28.10.2015 в 12:04
maxexcel Дата: Среда, 28.10.2015, 14:07 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 26
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Wasilic, Очень хорошее решение, как раз для моей рабочей книги.
Заметил вот какую проблему. Когда поочередно запускаешь макросы, все нормально. Т.е. запустил макрос1, потом нажал запустить макрос2, потом снова нажал макрос1. Все работает.
Но когда запускаешь подряд один и тот же макрос, он не выполняется. Т.е. запустил макрос1(макрос выполняется), затем нажал макрос2 (все выполняется), затем нажал еще раз макрос2 (и вот тут то МАКРОС НЕ ВЫПОЛНЯЕТСЯ).
Как быть?
 
Ответить
СообщениеWasilic, Очень хорошее решение, как раз для моей рабочей книги.
Заметил вот какую проблему. Когда поочередно запускаешь макросы, все нормально. Т.е. запустил макрос1, потом нажал запустить макрос2, потом снова нажал макрос1. Все работает.
Но когда запускаешь подряд один и тот же макрос, он не выполняется. Т.е. запустил макрос1(макрос выполняется), затем нажал макрос2 (все выполняется), затем нажал еще раз макрос2 (и вот тут то МАКРОС НЕ ВЫПОЛНЯЕТСЯ).
Как быть?

Автор - maxexcel
Дата добавления - 28.10.2015 в 14:07
Wasilich Дата: Среда, 28.10.2015, 15:58 | Сообщение № 15
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Как быть?
Да, форма запускает макрос при явной смене пункта меню. В таком случае придется обнулять ячейку.
В макросе Start() после End Select вставьте Sheets("имена").Range("A1") = 0

Либо вариант: кнопка рядом с формой запускающая тот же макрос "Start".


Сообщение отредактировал Wasilic - Среда, 28.10.2015, 16:08
 
Ответить
Сообщение
Как быть?
Да, форма запускает макрос при явной смене пункта меню. В таком случае придется обнулять ячейку.
В макросе Start() после End Select вставьте Sheets("имена").Range("A1") = 0

Либо вариант: кнопка рядом с формой запускающая тот же макрос "Start".

Автор - Wasilich
Дата добавления - 28.10.2015 в 15:58
maxexcel Дата: Среда, 28.10.2015, 16:09 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 26
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Wasilic, Класс, просто супер, то что надо!
Раз пошла такая "пьянка"))), как увеличить размер шрифта в выпадающем списке? Да, этот вопрос думаю много раз уже обсуждался, но чтобы далеко не ходить, может есть "под рукой" код.
[moder]Какое отношение размер шрифта имеет к теме "Запуск макроса из выпадающего списка"? Читаем Правила форума[/moder]


Сообщение отредактировал Pelena - Среда, 28.10.2015, 16:18
 
Ответить
СообщениеWasilic, Класс, просто супер, то что надо!
Раз пошла такая "пьянка"))), как увеличить размер шрифта в выпадающем списке? Да, этот вопрос думаю много раз уже обсуждался, но чтобы далеко не ходить, может есть "под рукой" код.
[moder]Какое отношение размер шрифта имеет к теме "Запуск макроса из выпадающего списка"? Читаем Правила форума[/moder]

Автор - maxexcel
Дата добавления - 28.10.2015 в 16:09
maxexcel Дата: Среда, 28.10.2015, 16:24 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 26
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Ладно, тогда тема закрыта, ВСЕМ СПАСИБО!
 
Ответить
СообщениеЛадно, тогда тема закрыта, ВСЕМ СПАСИБО!

Автор - maxexcel
Дата добавления - 28.10.2015 в 16:24
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Запуск макроса из выпадающего списка (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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