Страницы: 1 2 След.
RSS
Запуск макроса по динамическому имени
 
Добрый день,

Есть ли возможность по динамическому имени запускать макрос? Есть 10 макросов, пронумерованных от 1 до 10 и есть десять листов, у которых название совпадает с названием макроса. Можно ли создать макрос, который будет запускать другие макросы ориентируясь на название листа. То есть если сейчас открыт лист под названием 1, то макрос запускает макрос под именем 1, если открыт лист 2, то запускается макрос с именем 2 и т. д.
Спасибо.
 
Доброе время суток.
Можно. Изучаете Application.Run, плюс большое количество примеров использования на форуме.
 
Спасибо. Я использовал Call и не получалось. Сейчас буду изучать функцию application.run
 
можно, но скорее всего не нужно
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
А что имеете в виду под фразу не нужно? Не нужно использовать call, но с этой функцией тоже можно запускать макросы по динамическому имени?
 
Подразумевалось, что, возможно, не той дорогой идете (это о динамическом имени) :)
Покажите файл-пример и в нем продемонстрируйте, для чего это нужно.
 
хочу сказать что лист можно передать в макрос как параметр и дальше без всяких бубнов самыми стандартными (бытовыми) методами...
но теоретизировать можно сколько угодно, особенно когда НИЧЕГО не известно о задаче, которую Вы решаете

Вы спросили можно запустить макрос по динамическому имени?
ответ положительный - можно
конкретный вопрос, конкретный ответ и тему на этом можно закрыть
Изменено: Ігор Гончаренко - 09.02.2019 21:13:02
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
На каждом листе надо проверить результат и для проверки запускается макрос (не автоматически, а в ручную). И хочу сделать один макрос, который будет запускать другие в зависимости от названия листа.
 
Нажимая на кнопку на каждом листе, надо чтобы запускался определенный макрос
 
Так чем способ с Application.Run не угодил?
И не используйте для переменных зарезервированные слова. Также не забывайте объявлять переменные и указывать их тип.
 
Я вот только о нем узнал, сейчас изучаю. Спасибо.
 
Код
Sub Test()
  Select Case ActiveSheet.Name
  Case "1"
    Test1
  Case "2"
    Test2
  End Select
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ну а если будет 10 листов, то вариант с Application.Run будет покороче ))
Код
Sub Test()
Dim sName As String
    sName = ActiveSheet.Name
    Application.Run "Test" & sName
End Sub
 
Спасибо! Вариантов будет 30.  
 
ага, потом еще будет 30 одинаковых макросов, выполняющих одни и те же действия, но на разных листах...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Юрий М написал: вариант с Application.Run будет покороче
Это если макросы кардинально отличаются (один строки удаляет, второй значения меняет, третий пишет нехорошее слово на заборе).
Иначе - что короче:
- одна строка в коде вызова и 30 одинаковых макросов;
- 30 строк в Select Case  и один макрос?
 
Чего напали? В примере макросы присваивают разные значения ))
Игорь, но ведь в твоём варианте макросы тоже могут выполнять одно и то же действие )
Цитата
vikttur написал:
30 строк в Select Case  и один макрос?
Вить, где ты увидел один макрос? В обоих вариантах вызываются разные макросы.
 
Цитата
vikttur написал:
что короче
Мой вариант короче )
 
Я предположил, потомку как неизвестно, каккие там процедры... Если изменение одного значения - это разные макросы.., Прекрасно знаешь, что можно передать это значение в один макрос
 
Вариант работает спасибо. Макросы все разные и зависят от листа. Составляю тест и когда нажимаешь на кнопку следующий, то макрос должен проверить правильно ли ответили.
 
А Вы создайте отдельную тему, где покажете 3-4 Ваших макроса. Что-то мне подсказывает, что я и Игорь правы.
Или пришлите мне на почту Ваш файл. Интересно взглянуть, можно ли проще.
 
Вить, я что-то не пойму: я всего лишь утверждаю, что мой вариант короче. Разве не так? Просто короче. И ничего более.
 
Вариант Юрия очень подошел. Если использовать вариант Игоря, то придется прописывать очень много условий.
 
Это не мой вариант: Андрей предложил ))
 
Цитата
Юрий М написал: я всего лишь утверждаю, что мой вариант короче.
А я всего лишь предполагаю, что из 30 макросов делается 1 (возможно, с несколькими выносными функциями). В этом случае твой вариант НЕ короче (берем суммарное количество строк во всех макросах)
 
Блин-компот! Ну как не короче?!! Одна строка для вызова любого макроса, вместо нескольких строк, в случае использования конструкции Select Case. Причём тут "суммарное количество строк во всех макросах"? Я говорю про "главный" макрос...
Не зли меня,- укушу.
 
Опять кот голодный... :)
 
Макросы все разные и они друг на друга не похожи
 
удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Blazh написал:
макрос должен проверить правильно ли ответили
Вот здесь-то вся собака зарыта. По-любому это должен быть один макрос, и тогда уже не важно, 3, 30 или 300 листов содержат вопросы. Не знаю таких тестов, в которых ну никак нельзя было проверку провести универсальным способом.
Страницы: 1 2 След.
Наверх