Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Объединение работы двух макросов - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Объединение работы двух макросов (Макросы/Sub)
Объединение работы двух макросов
rever27 Дата: Вторник, 09.06.2015, 12:25 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Вопрос такой: Есть 2 макроса.
Один вычисляет, ищет и выделяет определенный диапазон (пишу элементарный пример поиска диапазона, ибо выкладывать весь макрос просто нет смысла)
[vba]
Код
Sub a_Found()
CurrentStart = ActiveCell.Row
CurrentEnd = Cells(ActiveCell.Row, 17).Offset(1).Row
End Sub
[/vba]
Второй же ищет в этом диапазоне определенные значения и заменяет их
[vba]
Код

a_Found
For j = CurrentEnd To CurrentStart Step -1
      If cells(j, 1) <= 0 Then cells(j, 1) = "err"
Next
[/vba]
Проблема в том, что после End Sub из буфера удаляются значения CurrentStart, CurrentEnd и второй макрос перестает работать.
Объединять их я принципиально не хочу, потому что макросов на определение диапазона - уйма, а действие по поиску - одно.


Сообщение отредактировал rever27 - Вторник, 09.06.2015, 12:25
 
Ответить
СообщениеВопрос такой: Есть 2 макроса.
Один вычисляет, ищет и выделяет определенный диапазон (пишу элементарный пример поиска диапазона, ибо выкладывать весь макрос просто нет смысла)
[vba]
Код
Sub a_Found()
CurrentStart = ActiveCell.Row
CurrentEnd = Cells(ActiveCell.Row, 17).Offset(1).Row
End Sub
[/vba]
Второй же ищет в этом диапазоне определенные значения и заменяет их
[vba]
Код

a_Found
For j = CurrentEnd To CurrentStart Step -1
      If cells(j, 1) <= 0 Then cells(j, 1) = "err"
Next
[/vba]
Проблема в том, что после End Sub из буфера удаляются значения CurrentStart, CurrentEnd и второй макрос перестает работать.
Объединять их я принципиально не хочу, потому что макросов на определение диапазона - уйма, а действие по поиску - одно.

Автор - rever27
Дата добавления - 09.06.2015 в 12:25
_Boroda_ Дата: Вторник, 09.06.2015, 12:27 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Сначала объявляете переменные, потом пишете макросы
[vba]
Код
Dim CurrentStart, CurrentEnd    

Sub a_Found()
CurrentStart = ActiveCell.Row
CurrentEnd = Cells(ActiveCell.Row, 17).Offset(1).Row
End Sub

Sub tt
h = CurrentStart
j=CurrentEnd
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеСначала объявляете переменные, потом пишете макросы
[vba]
Код
Dim CurrentStart, CurrentEnd    

Sub a_Found()
CurrentStart = ActiveCell.Row
CurrentEnd = Cells(ActiveCell.Row, 17).Offset(1).Row
End Sub

Sub tt
h = CurrentStart
j=CurrentEnd
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 09.06.2015 в 12:27
rever27 Дата: Вторник, 09.06.2015, 14:18 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
[vba]
Код

Dim CurrentStart, CurrentEnd

Sub a_Found()
CurrentStart = ActiveCell.Row
CurrentEnd = Cells(ActiveCell.Row, 17).Offset(1).Row
End Sub

Sub tt()

a_Found
For j = CurrentEnd To CurrentStart Step -1
     If Cells(j, 1) <= 0 Then Cells(j, 1) = "err"
Next
End Sub
[/vba]

Точнее будет сделать так )
Все работает, спасибо
 
Ответить
Сообщение[vba]
Код

Dim CurrentStart, CurrentEnd

Sub a_Found()
CurrentStart = ActiveCell.Row
CurrentEnd = Cells(ActiveCell.Row, 17).Offset(1).Row
End Sub

Sub tt()

a_Found
For j = CurrentEnd To CurrentStart Step -1
     If Cells(j, 1) <= 0 Then Cells(j, 1) = "err"
Next
End Sub
[/vba]

Точнее будет сделать так )
Все работает, спасибо

Автор - rever27
Дата добавления - 09.06.2015 в 14:18
rever27 Дата: Вторник, 09.06.2015, 14:33 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
В том, что данная конструкция не работает
[vba]
Код
Dim CurrentStart, CurrentEnd

Sub a_Found()
CurrentStart = ActiveCell.Row
CurrentEnd = Cells(ActiveCell.Row, 17).Offset(1).Row
End Sub

Sub tt()
h = CurrentStart
j = CurrentEnd
For i = j To h Step -1
     If Cells(j, 1) <= 0 Then Cells(j, 1) = "err"
Next

End Sub
[/vba]

Либо вы не поняли, что я хотел )
 
Ответить
СообщениеВ том, что данная конструкция не работает
[vba]
Код
Dim CurrentStart, CurrentEnd

Sub a_Found()
CurrentStart = ActiveCell.Row
CurrentEnd = Cells(ActiveCell.Row, 17).Offset(1).Row
End Sub

Sub tt()
h = CurrentStart
j = CurrentEnd
For i = j To h Step -1
     If Cells(j, 1) <= 0 Then Cells(j, 1) = "err"
Next

End Sub
[/vba]

Либо вы не поняли, что я хотел )

Автор - rever27
Дата добавления - 09.06.2015 в 14:33
Manyasha Дата: Вторник, 09.06.2015, 14:40 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Конечно не сработает, если Вы не проставите правильно номер итерации
If Cells(i, 1) <= 0 Then Cells(i, 1) = "err"


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеКонечно не сработает, если Вы не проставите правильно номер итерации
If Cells(i, 1) <= 0 Then Cells(i, 1) = "err"

Автор - Manyasha
Дата добавления - 09.06.2015 в 14:40
_Boroda_ Дата: Вторник, 09.06.2015, 14:43 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Конечно. Посмотрите на переменную J
Я Вам второй макрос привел как пример, а Вы зачем-то его к себе скопировали.
вот так нужно
[vba]
Код
Dim CurrentStart, CurrentEnd

Sub a_Found()
CurrentStart = ActiveCell.Row
CurrentEnd = Cells(ActiveCell.Row, 17).Offset(1).Row
End Sub

Sub tt()
For j = CurrentEnd To CurrentStart Step -1
     If Cells(j, 1) <= 0 Then Cells(j, 1) = "err"
Next
End Sub
[/vba]
Хотя, с другой стороны, Вы по-прежнему пользуетесь ActiveCell (очень, очень зря), поэтому Вам каждый раз нужно перезапускать макрос определения Старт и Енд
А если по-нормальному, то нужно один раз запустить его и данные у Вас уже сидят в глобальных переменных.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеКонечно. Посмотрите на переменную J
Я Вам второй макрос привел как пример, а Вы зачем-то его к себе скопировали.
вот так нужно
[vba]
Код
Dim CurrentStart, CurrentEnd

Sub a_Found()
CurrentStart = ActiveCell.Row
CurrentEnd = Cells(ActiveCell.Row, 17).Offset(1).Row
End Sub

Sub tt()
For j = CurrentEnd To CurrentStart Step -1
     If Cells(j, 1) <= 0 Then Cells(j, 1) = "err"
Next
End Sub
[/vba]
Хотя, с другой стороны, Вы по-прежнему пользуетесь ActiveCell (очень, очень зря), поэтому Вам каждый раз нужно перезапускать макрос определения Старт и Енд
А если по-нормальному, то нужно один раз запустить его и данные у Вас уже сидят в глобальных переменных.

Автор - _Boroda_
Дата добавления - 09.06.2015 в 14:43
rever27 Дата: Вторник, 09.06.2015, 14:53 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Manyasha, да, второпях менял, не заметил.
_Boroda_,
Немного Вас снова не понял. Во втором макросе нету АктивСеллс...

Код же второго макроса у меня выглядит так, чтобы отдельно не включать первый.
Я понимаю, что каждый раз, когда я буду активировать 2 макрос, я буду снова перезаписывать Start, End. Но т.к. диапазон постоянно меняется, то так и задумано.
[vba]
Код

Sub tt()

a_Found
For j = CurrentEnd To CurrentStart Step -1
     If Cells(j, 1) <= 0 Then Cells(j, 1) = "err"
Next
End Sub
[/vba]

А вот как сделать запуск макроса №1 один раз за работу Книги не включая его вручную в самом начале работы, т.к. активирую посредством других макросов - это вопрос интересный )
 
Ответить
СообщениеManyasha, да, второпях менял, не заметил.
_Boroda_,
Немного Вас снова не понял. Во втором макросе нету АктивСеллс...

Код же второго макроса у меня выглядит так, чтобы отдельно не включать первый.
Я понимаю, что каждый раз, когда я буду активировать 2 макрос, я буду снова перезаписывать Start, End. Но т.к. диапазон постоянно меняется, то так и задумано.
[vba]
Код

Sub tt()

a_Found
For j = CurrentEnd To CurrentStart Step -1
     If Cells(j, 1) <= 0 Then Cells(j, 1) = "err"
Next
End Sub
[/vba]

А вот как сделать запуск макроса №1 один раз за работу Книги не включая его вручную в самом начале работы, т.к. активирую посредством других макросов - это вопрос интересный )

Автор - rever27
Дата добавления - 09.06.2015 в 14:53
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Объединение работы двух макросов (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!