Это больше дизайн вашего кода. Во-первых, вы не можете поместить sub внутри другого суб, это не так, как это работает, к сожалению.
Что вы можете сделать, это использовать прицел и условия для управления потоком вашего кода и убедитесь, что некоторые части выполняются только тогда, когда вы хотите, чтобы они были.
Самый простой и рекомендуемый метод является просто писать другим подразделам так или иначе, но только вызов это, если определенное условие.
Public Sub Main_Sub()
Dim x As Integer
x = 11 '// Change x to 5 and the other sub won't run
If x > 10 Then
Other_Sub
'// Code execution will resume here once 'Other_Sub' has finished
MsgBox "Other Sub complete!"
End If
End Sub
Private Sub Other_Sub()
MsgBox "You're in the other sub now!"
End Sub
Другой способ просто выйти подлодку, если ваше условие не выполняется, хотя используется больше для обработки ошибок, чем условное исполнение:
Public Sub Main_Sub()
Dim x As Integer
x = 11 '// Change x to 5 and the other sub won't run
If x > 10 Then
Other_Sub
'// Code execution will resume here once 'Other_Sub' has finished
MsgBox "Other Sub complete!"
Else
Exit Sub
End If
MsgBox "You will only see this message if x was greater than 10!"
End Sub
Private Sub Other_Sub()
MsgBox "You're in the other sub now!"
End Sub
Один окончательного метод может использовать метки, и хотя это жизнеспособное решение, я рекомендую это, потому что это сильно влияет на читаемость и логику вашего кода:
Public Sub Main_Sub()
Dim x As Integer
x = 11 '// Change x to 5 and the other sub won't run
If x < 11 Then GoTo Skip_Other_Sub:
Other_Sub
Skip_Other_Sub:
MsgBox "You will see this regardless of the other sub being run!"
End Sub
Private Sub Other_Sub()
MsgBox "You're in the other sub now!"
End Sub
Основным моментом здесь является то, что лучше писать все кода, которые могут или не могут быть необходимы и назвать его условно, а не пытаться создать код «на лету», который является грязным в лучше всего и требует программного доступа к VBE, который может оставить ваш компьютер уязвимым, если вы не на 100% уверены в том, что делаете.
См. Здесь http://www.cpearson.com/excel/vbe.aspx о том, как программировать код в VBA –
. Запись через VBE увлекательна, но я бы избегал этого, если возможно. если функция кнопки уже известна во время разработки, вы можете ее закодировать и назначить каждому свойству действия кнопки с полной ссылкой (см. ниже), поскольку субтитры можно вызывать, даже если они находятся в разных книгах. у вас есть два пути: либо добавив лист «target» (где находится кнопка) ссылку на «базовую» книгу (где находится функция), либо с помощью метода «Run» («Application.Run» «BaseMacrosSheet.xlsm «!Имя_макроса»). Первый не требует, чтобы «базовая» книга была открыта во время выполнения, в то время как последняя делает. – user3598756