Страницы: 1
RSS
Активация макроса., Активация макроса другим макросом через переменную.
 
Код
Sub mac()
Dim M As String
   M = Range("A1").Value
mac & M
End Sub

Sub mac1()
Range("A3").Select

End Sub
Sub mac2()
Range("A5").Select
End Sub
Здравствуйте знатоки VBA!
У меня возникла проблема, т.к. я не силён в написании макроса.
Суть такова. В ячейке А1, по определённым условиям выставляется значение 1 или 2. Исходя из этого значения срабатывает либо макрос мас1 либо мас2. Я задал переменную и сцепил её значение в имени макроса и вероятно ошибся с синтаксисом или чем то подобным. Помогите пожалуйста. Если файл необходим, я его загружу. Спасибо.
 
Цитата
sirius0211 написал:
вероятно ошибся с синтаксисом
притом очень нехило :)
Наверное, надо так:
Код
Sub mac()
Dim M As String
   M = Range("A1").Value
Application.Run "mac" & M
End Sub

обратите внимание на то, что если "mac" это статичный текст - он должен быть в кавычках. А М - переменная. Она должна быть без кавычек.
Изменено: Дмитрий(The_Prist) Щербаков - 25.11.2022 13:01:04
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Огромное спасибо Дмитрий!
Я обязательно приму к сведенью Ваши замечания и попытаюсь освоить "Application.Run".
Спасибо ещё раз!!!
 
Код
Application.Run "mac" & M 

выдаёт ошибку "этот макрос отсутствует в книге или все макросы отключены, хотя макрос есть в том же модуле и сам отдельно срабатывает, пытаюсь разобраться.

Изменено: sirius0211 - 25.11.2022 13:17:21
 
Выдаёт ошибку. Не пойму в чем подвох. Помогите пожалуйста.
 
вы в стремлении минимизировать длины имен процедур перешли допустимую правилами границу В1, В2...
Код
Sub A()
Dim M As String
   M = Range("A1").Value
Application.Run "Sirius" & M
End Sub
Sub Sirius1()
Range("A3").Select
End Sub
Sub Sirius2()
Range("A5").Select
End Sub
Изменено: Ігор Гончаренко - 25.11.2022 13:55:03
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Плохая идея называть макросы именами ячеек и столбцов.
Называйте макросы любым не зарезервированным именем - и проблем не будет:
Код
Sub AutoCallMacro()
    Dim M As String
   M = Range("A1").Value
    Application.Run "Macro" & M
End Sub
Sub Macro1()
Range("A3").Select
End Sub
Sub Macro2()
Range("A5").Select
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо Вам большое! Разъяснили. Обязательно учту в будущем.
Страницы: 1
Наверх