Страницы: 1
RSS
Запуск разных макросов по различным условиям одной кнопкой
 
Здравствуйте, уважаемые форумчане! Большое спасибо всем за оказанную ранее помощь!
Продолжая работу, о которой я уже писал в теме:
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=84008&TITLE_SEO=84008-svyazan...
понял, что без макросов не обойтись.
А в VBA я силен настолько, что без посторонней помощи могу написать только "Sub" и "And Sub".
Нашел в "Приемах" макрос для переноса данных на другой лист, и даже сам!:) придумал, как применить переменную для того, чтобы макрос узнавал имя листа, на который нужно записать данные, и сам сумел ее вставить в существующий код, и заработало, надо же!
Но возникла задача, с которой сам справиться не могу.
Нужно чтобы в зависимости от разных условий запускались разные макросы, причем это все - с помощью одной кнопки (подробности в файле-примере).
Там несколько макросов, возможно, неудобно будет разбираться в моем корявом коде, но может хотя бы подскажете, в каком направлении и как действовать.
Заранее благодарю за помощь!
 
Зачем такие сложности?
Добавьте проверку заполнения нужных полей в основной макрос.
Например.
Код
Sub Add_Zapis()
If Range("N3").Value = "0" Then
    MsgBox "Выберите нужную группу продуктов из раскрывающегося списка в желтом поле", 64, "НЕ ВЫБРАНА ГРУППА ПРОДУКТОВ"
    Range("E3").Select
    Exit Sub
End If
If Range("O3").Value = "0" Then
    MsgBox "Введите наименование нового продукта", 64, "НЕТ НАИМЕНОВАНИЯ"
    Range("E5").Select
    Exit Sub
End If
    i = Range("K6")
    Worksheets("Добавить_Новый_Продукт").Range("A15:G15").Copy                         'копируем строчку с данными из формы
    n = Worksheets(i).Range("A100000").End(xlUp).Row                'определяем номер последней строки в табл. S4 (название листа)
    Worksheets(i).Cells(n + 1, 1).PasteSpecial Paste:=xlPasteValues 'вставляем в следующую пустую строку
    Worksheets("Добавить_Новый_Продукт").Range("E3:I3,E5:I5,E7:I7").ClearContents               'очищаем форму
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Ежедневно получаю по почте накладные от поставщиков и автоматом экспортирую их в 1С.
Код
Sub ExportToOneC()
Dim nakl, mcrs, i&
Application.ScreenUpdating = False
Application.DisplayAlerts = False
nakl = Array("уфOДИ*", "УПД  RSP*", "????.xls", "00МЕ-*", "??????_*")
mcrs = Array("Macr1", "Macr2", "Macr3", "Macr4")
With ActiveWorkbook
For i = 0 To UBound(nakl)
    If .Name Like nakl(i) Then
        Application.Run mcrs(i)
        Exit For
    End If
Next
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

nakl - это входящие изменяющиеся имена документов.
mcrs - макрос, который обрабатывает конкретную накладную, распознавая её по названию файла.
-----------
Может поможет..
Изменено: Владимир - 10.11.2016 08:30:56
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Sanja, потому и сложности, что только-только начинаю изучать VBA, пока не знаю как задавать условия и вообще в этой области можно сказать ничего не знаю :).
Владимир, Sanja,  спасибо большое, пошел изучать и пробовать, о результатах отпишусь.
 
С msgBox вроде получается, а вот с выводом UserForm  и кнопками на ней так и не могу разобраться - наверное потому, что синтаксис не могу соблюсти.
 
Немного исправил. Форма появляется, дальше логику не понял.
Код
If Range("R9").Value = "1" Then  'Условие для зеленой кнопки и отображения UserForm1
   'Private Sub UserForm1_Activate()  'ХОЧУ ОТОБРАЗИТЬ ФОРМУ!!!! НО НЕ ПОЛУЧАЕТСЯ!!!!
   'Private Sub CommandButton2_Click() 'Должна скрыться форма и выделиться ячейка Е7
   UserForm1.Show
   'UserForm1.Hide'не понятно, только открыли форму и сразу её закрываете, зачем открывали?
   Range("E7").Select
   'End Sub 'здесь If не закрыт, а вы закрываете процедуру
End If
End Sub
Изменено: gling - 09.11.2016 22:20:08
 
gling, спасибо! Зачем закрывать - теперь видно в примере, после того, как я добавил код на обе кнопки (сразу не мог сообразить, как это сделать, а теперь дошло  :) , код работает.
А логика здесь такая: если не заполнены ячейки для ввода содержания в 100гр., при нажатии на "ОК" должна появиться форма. Сейчас она у нас появляется после ввода значений в эти ячейки. Тут как-то условие правильно нужно задать и сделать так, чтобы оно срабатывало при нажатии на "ОК", а не после ввода значения - для этого и сделаны кнопки на UserForm.
Но пока не могу сообразить как это сделать, чтобы срабатывало от "ОК".
И когда одна или несколько этих ячеек будут заполнены, при нажатии на "ОК" должен сработать код для записи в таблицу (он есть и в основном макросе, и его же я посадил на красную кнопку).
 
Жуткая смесь бульдога с носорогом. :)
Сделал ввод для кнопки ОК. Остальную конфликтующую жуть не трогал.
 
RAN, Вы не правы - кроме животных там еще присутствуют скрипка, бубен и утюг  :)
Спасибо большое!!!
Буду разбираться. Что такое "lan" не знаю, но так предполагаю, что это именно те условия, из которых нужно оставить только те, которые нужны.
А с жутью буду потихоньку разбираться, все равно заставим это хозяйство работать как надо!
 
Len=ДЛСТР
 
Отвечу на вопрос, заявленный в названии темы. Для запуска разных макросов по разным условиям одной кнопкой используется возможность запускать один макрос из другого макроса. Назначаем кнопке макрос_1 и в этом макросе прописываем необходимые условия и вызовы других макросов:
Код
Sub Макрос_1()
If  (Условие_1) then
    Макрос_2
    Макрос_3
Else
    Макрос_2
End if
If  (Условие_2) then
    Макрос_4
    Макрос_5 
End if  
End Sub
 
Два дня терзал VBA-редактор, и наконец результат есть! Именно тот, который и хотел получить!
Наверное, код все-таки не совсем оптимальный и красивый, но ведь это можно сказать первый код в моей жизни!
И от бульдогов с носорогами по-моему удалось избавиться (правда не знаю, от всех ли)  :)
Sanja,  gling, Владимир,  RAN,  Equio, огромное вам СПАСИБО!!!
Еще раз убедился, что на планете EXCEL живут настоящие добрые волшебники!
Страницы: 1
Наверх