Страницы: 1
RSS
Макрос внутри другого макроса, Элементы управления формы (кнопка)
 
Добрый день! Помогите, пожалуйста, с решением данного вопроса.

Есть 2 макроса:
1 - создает кнопку на листе с "ссылкой" на другой макрос (Knopka);
2 - окрашиевает заданные ячейки в красный цвет, если пустая или 0 (Zalivka).

Проблема состоит в следующем - как "заменить" ссылку на макрос кодом, чтобы в доступных макросах был только 1.

Вот коды этих макросов:
Код
Sub Knopka()
'
' Knopka ??????
'

'
    ActiveSheet.Buttons.Add(200.25, 97.5, 89.25, 27).Select
    Selection.OnAction = "Zalivka"
    Selection.Characters.Text = "GO"
    With Selection.Characters(Start:=1, Length:=17).Font
        .Name = "Calibri"
        .FontStyle = "Bold"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = 1
    End With
    Range("G10").Select
End Sub
Код
Sub Zalivka()
'
' Zalivka ??????
'

'
    Range("B15:B50").Select
    Range("B15:B50,B60:B95").Select
    Range("B60").Activate
    Range("B15:B50,B60:B95,B106:B141").Select
    Range("B106").Activate
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
        Formula1:="=0"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 255
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
End Sub
Решением не является "скопируйте оба макрос в книгу и все будет работать", так как эти 2 макроса являются лишь элементами огромного макроса создания шаблона для анализа информации. То есть по уровню они находятся на 2 и 3 этапе... Кроме того, макрос окраски по условию применяется только по нажатию кнопки (этап 2) пользователем.
 
Ну если уж этот супермакрос такой огромный, то десяток строк макроса нажатия на кнопку погоды не сделают. Даже эти два можно в половину сократить убрав ненужные Select'ы и Activat'ы. Например
Вместо строк 7-13 можно обойтись одной
Код
    Range("B15:B50,B60:B95,B106:B141").FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=0"

Цитата
Macedon написал: Кроме того, макрос окраски по условию применяется только по нажатию кнопки (этап 2) пользователем
Так он для этого и нужен - обрабатывать нажатие на кнопку пользователем. или Вы что-то другое от него хотите
Согласие есть продукт при полном непротивлении сторон
 
Sanja, спасибо за оптимизацию от мусора в коде! Хочу по сути вписать действие, осуществляемое в 2 макросе (Zalivka) в 1 макрос, но не знаю как:( Вшить 2 в 1 8)
 
Цитата
Macedon написал:
Решением не является "скопируйте оба макрос в книгу и все будет работать"
Цитата
Macedon написал:
эти 2 макроса являются лишь элементами огромного макроса
Нужны проблемы?
 
RAN, по ссылке - это не решает проблему, поскольку множит количество макросов. Идеал - 1 макрос в книге, который выполняет действия (отрисовка таблицы с формулами (здесь код не представлен), вставка элементов управления (кнопки), на которые завесили другие макросы (Zalivka, например). Как это сделать - я не знаю=( Подозреваю, что можно решить с модификацией строки кода:
Код
Selection.OnAction = "Zalivka"


   
 
Цитата
Macedon написал:
по ссылке - это не решает проблему
Решает

Цитата
Macedon написал:
Идеал
создает
 
Согласен с ув.RAN. Зачем Вы боитесь количества макросов? И в плане отладки кода, и в плане сопровождения программы лучше 10 маленьких чем 1 супербольшой...
Согласие есть продукт при полном непротивлении сторон
 
RAN, Sanja, спасибо за помощь! Воспользовался вашими советами и добавил новым макросом. Я просто надеялся, что:
Код
Selection.OnAction = "Zalivka"
Можно прописать внутри кнопки, раз нельзя, то будем работать с Вашими подсказками.

Еще раз спасибо за помощь!
Страницы: 1
Наверх