обединение двух макросов

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
karponen
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 21.02.2013 (Чт) 11:39

обединение двух макросов

Сообщение karponen » 21.02.2013 (Чт) 12:59

Обединить два макроса в один. Коды привожу ниже.
Что делаю;
имею таблицу 2000 сторок, 16 столбцов. в столбцах E, C, B даты (россия, европпа, америка)
сротирую по дате, после сортировки нужно вернутся в ту часть таблицы сторки котрой не имеют заливки
или залиты другим цветом чем строка с ячейкой начала диапозона А4.
оба макроса отдельно работают и делают, что нужно. Обединить не получается не опыта работы с кодами.

Код: Выделить всё
Sub сортировка()
'
' сортировка Макрос
' сортировка по датам
'
' Сочетание клавиш: Ctrl+я
'
    Range("A4:P2000").Select
    ActiveWorkbook.Worksheets("приходы").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("приходы").Sort.SortFields.Add Key:=Range("E4:E2000" _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("приходы").Sort.SortFields.Add Key:=Range("C4:C2000" _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("приходы").Sort.SortFields.Add Key:=Range("B4:B2000" _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("приходы").Sort
        .SetRange Range("A4:P2000")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
      End With
End Sub
Sub WhatColor()
If ActiveCell.Interior.Color <> 16777215 Then
    Do While ActiveCell.Interior.Color = ActiveCell.Offset(1, 0).Interior.Color
         ActiveCell.Offset(1, 0).Select
    Loop
    ActiveCell.Offset(1, 0).Select
End If
End Sub

[Viper] :: Во-первых, пользуйся тэгом CODE. Во-вторых, тема открыта не в том раздел, как мне кажется более подходящим является раздел по VBA.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: обединение двух макросов

Сообщение ger_kar » 21.02.2013 (Чт) 16:29

Эх...
Для начала приведи код в надлежащий вид. Оформи его используя тег Code. Сделай нормальное фоматирование, отступы как положено и все такое. Ибо в каше твоего кода в том виде, в котором ты его выложил нет не малейшего желания.
Бороться и искать, найти и перепрятать

karponen
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 21.02.2013 (Чт) 11:39

Re: обединение двух макросов

Сообщение karponen » 22.02.2013 (Пт) 8:27

Спасибо, если бы я это умел не обратился бы за помощь.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: обединение двух макросов

Сообщение ger_kar » 22.02.2013 (Пт) 8:48

karponen писал(а):Спасибо, если бы я это умел не обратился бы за помощь.
Да тут собственно и уметь то ничего особо не надо. Ты же нашел тег Code. И форматирование уже более менее. Хотя конечно и далеко от идеала. Что касается форматирования, то тут даже не нужно быть особенно программистом, что-бы придать коду удобочитаемый вид. Вставить пропуски между процедурами и т.п.
Судя по написаному, и исходя из приведенного кода, насколько я понял код был сгенерирован автоматически. И нужно всего ничего, чтобы эти два макроса выполнялись последовательно. Если так, то достаточно из одного макроса вызвать другой. Поэтому будет так.
Код: Выделить всё
Sub сортировка()
'
' сортировка Макрос
' сортировка по датам
'
' Сочетание клавиш: Ctrl+я
'
    Range("A4:P2000").Select
    ActiveWorkbook.Worksheets("приходы").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("приходы").Sort.SortFields.Add Key:=Range("E4:E2000" _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("приходы").Sort.SortFields.Add Key:=Range("C4:C2000" _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("приходы").Sort.SortFields.Add Key:=Range("B4:B2000" _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("приходы").Sort
        .SetRange Range("A4:P2000")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
      End With

     'Вот тут и производится вызов второго макроса. Делается это элементарно
     WhatColor

End Sub

Sub WhatColor()
If ActiveCell.Interior.Color <> 16777215 Then
    Do While ActiveCell.Interior.Color = ActiveCell.Offset(1, 0).Interior.Color
         ActiveCell.Offset(1, 0).Select
    Loop
    ActiveCell.Offset(1, 0).Select
End If
End Sub


Вот и все. Ну это если я правильно понял задачу из написанного. Ну, а если не то ...
Тогда пиши :)
Бороться и искать, найти и перепрятать

karponen
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 21.02.2013 (Чт) 11:39

Re: обединение двух макросов

Сообщение karponen » 22.02.2013 (Пт) 11:20

Спасибо работает. Только страннное дело если использую сочетание горячих клавиш (Сочетание клавиш: Ctrl+я) проподает внесенная дата, по которой сортирую, а если заходиш в список макросов, выбираешь команду "выполнить" все работает.

karponen
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 21.02.2013 (Чт) 11:39

Re: обединение двух макросов

Сообщение karponen » 22.02.2013 (Пт) 11:31

Нашел. Мой косяк, в парамертах пропала настойка сочетания клавиш. Востановил теперь все работает. Буду изучать дальше интересная штука.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: обединение двух макросов

Сообщение ger_kar » 22.02.2013 (Пт) 16:06

Изучай, здесь на форуме валом материалов для изучения :).
Бороться и искать, найти и перепрятать


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 43

    TopList