Здравствуйте, уважаемые форумчане! Большое спасибо всем за оказанную ранее помощь! Продолжая работу, о которой я уже писал в теме: 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 - макрос, который обрабатывает конкретную накладную, распознавая её по названию файла. ----------- Может поможет..
Sanja, потому и сложности, что только-только начинаю изучать VBA, пока не знаю как задавать условия и вообще в этой области можно сказать ничего не знаю . Владимир, Sanja, спасибо большое, пошел изучать и пробовать, о результатах отпишусь.
Немного исправил. Форма появляется, дальше логику не понял.
Код
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, спасибо! Зачем закрывать - теперь видно в примере, после того, как я добавил код на обе кнопки (сразу не мог сообразить, как это сделать, а теперь дошло , код работает. А логика здесь такая: если не заполнены ячейки для ввода содержания в 100гр., при нажатии на "ОК" должна появиться форма. Сейчас она у нас появляется после ввода значений в эти ячейки. Тут как-то условие правильно нужно задать и сделать так, чтобы оно срабатывало при нажатии на "ОК", а не после ввода значения - для этого и сделаны кнопки на UserForm. Но пока не могу сообразить как это сделать, чтобы срабатывало от "ОК". И когда одна или несколько этих ячеек будут заполнены, при нажатии на "ОК" должен сработать код для записи в таблицу (он есть и в основном макросе, и его же я посадил на красную кнопку).
RAN, Вы не правы - кроме животных там еще присутствуют скрипка, бубен и утюг Спасибо большое!!! Буду разбираться. Что такое "lan" не знаю, но так предполагаю, что это именно те условия, из которых нужно оставить только те, которые нужны. А с жутью буду потихоньку разбираться, все равно заставим это хозяйство работать как надо!
Отвечу на вопрос, заявленный в названии темы. Для запуска разных макросов по разным условиям одной кнопкой используется возможность запускать один макрос из другого макроса. Назначаем кнопке макрос_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 живут настоящие добрые волшебники!