Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.08.2010, 16:39   #1
Pilot
Пользователь
 
Регистрация: 13.11.2007
Сообщений: 33
По умолчанию Объединение макросов

Всем доброго времени суток.
Можно ли объединить два (несколько) небольших макроса использующие один источник, но разные критерии. Пример:

Sub f5()
Dim i As Long, acontrol As Date, icounter As Long
With Sheets("ХРОНОМЕТРАЖ")
For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
If .Cells(i, 5) = "УТП" And .Cells(i, 29) = "вне базы " And .Cells(i, 1) <> acontrol And .Cells(i, 1) >= Sheets("Подведение итогов").Cells(55, 1) _
And .Cells(i, 1) <= Sheets("Подведение итогов").Cells(55, 2) Then
acontrol = .Cells(i, 1)
icounter = icounter + 1
End If
Next
Sheets("Подведение итогов").Cells(8, 14) = icounter
End With
End Sub

Sub f6()
Dim i As Long, acontrol As Date, icounter As Long
Application.ScreenUpdating = False
With Sheets("ХРОНОМЕТРАЖ")
For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
If .Cells(i, 5) = "УТП" And .Cells(i, 29) = "вне базы " And .Cells(i, 1) <> acontrol And .Cells(i, 1) >= Sheets("Подведение итогов").Cells(56, 1) _
And .Cells(i, 1) <= Sheets("Подведение итогов").Cells(56, 2) Then
acontrol = .Cells(i, 1)
icounter = icounter + 1
End If
Next
Sheets("Подведение итогов").Cells(9, 14) = icounter
End With
End Sub

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

Последний раз редактировалось Pilot; 31.08.2010 в 16:42.
Pilot вне форума Ответить с цитированием
Старый 31.08.2010, 16:52   #2
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Код:
Sub f5()
Dim i As Long, acontrol As Date, icounter As Long,li as long
With Sheets("ХРОНОМЕТРАЖ")
For li = 0 to 1
For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
If .Cells(i, 5) = "УТП" And .Cells(i, 29) = "вне базы " And .Cells(i, 1) <> acontrol And .Cells(i, 1) >= Sheets("Подведение итогов").Cells(55+li, 1) _
And .Cells(i, 1) <= Sheets("Подведение итогов").Cells(55+li, 2) Then
acontrol = .Cells(i, 1)
icounter = icounter + 1
End If
Next
Sheets("Подведение итогов").Cells(8+li, 14) = icounter
next li
End With
End Sub
Выделил, что изменил.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 31.08.2010, 16:52   #3
аналитика
Форумчанин
 
Регистрация: 14.05.2009
Сообщений: 311
По умолчанию

Код:
Sub f5()
   Comm 55, 8
End Sub

Sub f6()
   Comm 56, 9
End Sub
'------------------------------------------------------------------------
Sub Comm(arg1, arg2)
Dim i As Long, acontrol As Date, icounter As Long
With Sheets("ХРОНОМЕТРАЖ")
For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
If .Cells(i, 5) = "УТП" And .Cells(i, 29) = "вне базы " And .Cells(i, 1) <> acontrol And .Cells(i, 1) >= Sheets("Подведение итогов").Cells(arg1, 1) _
And .Cells(i, 1) <= Sheets("Подведение итогов").Cells(arg1, 2) Then
acontrol = .Cells(i, 1)
icounter = icounter + 1
End If
Next
Sheets("Подведение итогов").Cells(arg2, 14) = icounter
End With
End Sub
аналитика вне форума Ответить с цитированием
Старый 31.08.2010, 17:02   #4
Pilot
Пользователь
 
Регистрация: 13.11.2007
Сообщений: 33
По умолчанию

Цитата:
Сообщение от The_Prist Посмотреть сообщение
Код:
Sub f5()
Dim i As Long, acontrol As Date, icounter As Long,li as long
With Sheets("ХРОНОМЕТРАЖ")
For li = 0 to 1
For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
If .Cells(i, 5) = "УТП" And .Cells(i, 29) = "вне базы " And .Cells(i, 1) <> acontrol And .Cells(i, 1) >= Sheets("Подведение итогов").Cells(55+li, 1) _
And .Cells(i, 1) <= Sheets("Подведение итогов").Cells(55+li, 2) Then
acontrol = .Cells(i, 1)
icounter = icounter + 1
End If
Next
Sheets("Подведение итогов").Cells(8+li, 14) = icounter
next li
End With
End Sub
Выделил, что изменил.
Благодарю, но это если два макроса, а если их таких 10 то li = 0 to 10 или нет?
Pilot вне форума Ответить с цитированием
Старый 31.08.2010, 17:07   #5
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Цитата:
Сообщение от Pilot Посмотреть сообщение
Благодарю, но это если два макроса, а если их таких 10 то li = 0 to 10 или нет?
Если 10, то 0 to 9, т.к. начинаем с 0. Всего проходов будет 10. Если указать 0 to 10, то проходов будет 11.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 31.08.2010, 17:12   #6
Pilot
Пользователь
 
Регистрация: 13.11.2007
Сообщений: 33
По умолчанию

Цитата:
Сообщение от The_Prist Посмотреть сообщение
Если 10, то 0 to 9, т.к. начинаем с 0. Всего проходов будет 10. Если указать 0 to 10, то проходов будет 11.
Спасибо, буду пробовать, но завтра
Pilot вне форума Ответить с цитированием
Старый 31.08.2010, 17:20   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Только icounter будет вести себя не так, как в макросах по одному. Возможно, его надо обнулять на каждом шаге внешнего цикла.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 31.08.2010, 17:25   #8
Pilot
Пользователь
 
Регистрация: 13.11.2007
Сообщений: 33
По умолчанию

Цитата:
Сообщение от The_Prist Посмотреть сообщение
Если 10, то 0 to 9, т.к. начинаем с 0. Всего проходов будет 10. Если указать 0 to 10, то проходов будет 11.
все-таки решил попробовать сегодня, что-то не выходит, пишет что нет в библиотеке li (can't find project or library)
Pilot вне форума Ответить с цитированием
Старый 31.08.2010, 17:30   #9
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Известная проблема. Вот здесь я описывал способ устранения.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 31.08.2010, 17:35   #10
Pilot
Пользователь
 
Регистрация: 13.11.2007
Сообщений: 33
По умолчанию

Цитата:
Сообщение от The_Prist Посмотреть сообщение
Известная проблема. Вот здесь я описывал способ устранения.
Вах, волшебник, однако. Еще раз спасибо
Pilot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программирование макросов stasbz Фриланс 10 22.11.2014 08:48
Автозапуск макросов blacklight Microsoft Office Excel 2 01.10.2009 13:33
Создание макросов Женечка2607 Microsoft Office Excel 3 23.04.2009 21:17
Автоматический запуск макросов с листа на котором указан перечень макросов с параметрами и без Neoli Microsoft Office Excel 2 09.03.2009 14:31
Сравнение макросов valerij Microsoft Office Excel 24 09.06.2008 00:57