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

Вход

Регистрация

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

 

= Мир MS Excel/Зацикливание процесса внутри макроса - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Зацикливание процесса внутри макроса (Макросы/Sub)
Зацикливание процесса внутри макроса
master-dd Дата: Суббота, 12.05.2018, 17:24 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 0 ±
Замечаний: 0% ±

2016
Добрый день. Помогите пожалуйста решить такую задачку. У меня есть большой код (весь его приводить не буду). Внутри кода есть такой процесс:

[vba]
Код
Range("G19").FormulaLocal = "=COUNTIF(B19:F19;""<>0"")"
If Range("G19").Value = 0 Then
ActiveSheet.Rows("18:34").Delete
End If
[/vba]

Собственно, нужно его зациклить. Т.е. он должен повторяться до тех пор, пока значения в ячейке G19 не окажется отличным от 0.

Заранее спасибо.


Сообщение отредактировал master-dd - Суббота, 12.05.2018, 18:40
 
Ответить
СообщениеДобрый день. Помогите пожалуйста решить такую задачку. У меня есть большой код (весь его приводить не буду). Внутри кода есть такой процесс:

[vba]
Код
Range("G19").FormulaLocal = "=COUNTIF(B19:F19;""<>0"")"
If Range("G19").Value = 0 Then
ActiveSheet.Rows("18:34").Delete
End If
[/vba]

Собственно, нужно его зациклить. Т.е. он должен повторяться до тех пор, пока значения в ячейке G19 не окажется отличным от 0.

Заранее спасибо.

Автор - master-dd
Дата добавления - 12.05.2018 в 17:24
_Boroda_ Дата: Суббота, 12.05.2018, 19:00 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 13251
Репутация: 5457 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Вы б файлик приложили? Думаю, что так извращаться не стОит, есть гораздо более быстрые способы
А если таки хотите оставить свой, то смотрите цикл Do While… Loop
Например здесь
http://vremya-ne-zhdet.ru/vba-excel/tsikl-do-while-loop/


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВы б файлик приложили? Думаю, что так извращаться не стОит, есть гораздо более быстрые способы
А если таки хотите оставить свой, то смотрите цикл Do While… Loop
Например здесь
http://vremya-ne-zhdet.ru/vba-excel/tsikl-do-while-loop/

Автор - _Boroda_
Дата добавления - 12.05.2018 в 19:00
master-dd Дата: Суббота, 12.05.2018, 21:17 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 0 ±
Замечаний: 0% ±

2016
_Boroda_, спасибо, что отозвались. К сожалению в том то и беда, что я не знаю, как воспользоваться информацией с сайтов - у меня банально не хватает базовых знаний, чтобы разобраться в терминологии. Учусь я этому делу разбирая и понимая уже существующие коды. Поэтому и прошу помощи... Собственно, файл с примером прилагаю.
На странице "Pdf" постепенно заполняется таблица (для этого примера не важно, каким способом). В любой момент нужно иметь возможность сформировать для отчёта файл pdf.
Суть в том, чтобы на выходе получить файл формата pdf, в котором не будет незаполненных таблиц. Как сделать такой файл я знаю (в приложенном примере всё прописано). Но как перед сохранением удалить все "пустые" таблицы я придумал только так, как прописано в коде. При этом, чтобы не повторять процедуру, которую я описал в вопросе, 19 раз, я хочу её "зациклить". Вот, собственно, и всё.

Буду признателен за помощь.
К сообщению приложен файл: 7341985.xlsm(46.5 Kb)
 
Ответить
Сообщение _Boroda_, спасибо, что отозвались. К сожалению в том то и беда, что я не знаю, как воспользоваться информацией с сайтов - у меня банально не хватает базовых знаний, чтобы разобраться в терминологии. Учусь я этому делу разбирая и понимая уже существующие коды. Поэтому и прошу помощи... Собственно, файл с примером прилагаю.
На странице "Pdf" постепенно заполняется таблица (для этого примера не важно, каким способом). В любой момент нужно иметь возможность сформировать для отчёта файл pdf.
Суть в том, чтобы на выходе получить файл формата pdf, в котором не будет незаполненных таблиц. Как сделать такой файл я знаю (в приложенном примере всё прописано). Но как перед сохранением удалить все "пустые" таблицы я придумал только так, как прописано в коде. При этом, чтобы не повторять процедуру, которую я описал в вопросе, 19 раз, я хочу её "зациклить". Вот, собственно, и всё.

Буду признателен за помощь.

Автор - master-dd
Дата добавления - 12.05.2018 в 21:17
_Boroda_ Дата: Суббота, 12.05.2018, 22:46 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 13251
Репутация: 5457 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Я бы сделал примерно так (вообще без цикла - тупо удаляем всё, что ниже последней заполненной ячейки в столбце В)
[vba]
Код
    Workbooks.Add
    With ActiveSheet
        .Paste
        r1_ = Range("B" & .Rows.Count).End(3).Row
        r11_ = .Range("A1").SpecialCells(xlLastCell).Row
        .Range("A" & r1_ + 1).Resize(r11_ - r1_ + 1).EntireRow.Delete
    End With
[/vba]
С циклом вариантов куча. Например:
[vba]
Код
    Workbooks.Add
    ActiveSheet.Paste
    r1_ = Range("A" & Rows.Count).End(3).Row + 2 'последняя заполненная строка +2
    n_ = 17 'кол-во строк в блоке
    k_ = 1 'счетчик
    Do While WorksheetFunction.CountA(Range("B" & r1_ - k_ * n_).Resize(, 5)) = 0 'идем снизу наверх
    hh = r1_ - k_ * n_
        Range("B" & r1_ - k_ * n_).Resize(n_).EntireRow.Delete
        k_ = k_ + 1
    Loop
[/vba]
К сообщению приложен файл: 7341985_1.xlsm(48.4 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЯ бы сделал примерно так (вообще без цикла - тупо удаляем всё, что ниже последней заполненной ячейки в столбце В)
[vba]
Код
    Workbooks.Add
    With ActiveSheet
        .Paste
        r1_ = Range("B" & .Rows.Count).End(3).Row
        r11_ = .Range("A1").SpecialCells(xlLastCell).Row
        .Range("A" & r1_ + 1).Resize(r11_ - r1_ + 1).EntireRow.Delete
    End With
[/vba]
С циклом вариантов куча. Например:
[vba]
Код
    Workbooks.Add
    ActiveSheet.Paste
    r1_ = Range("A" & Rows.Count).End(3).Row + 2 'последняя заполненная строка +2
    n_ = 17 'кол-во строк в блоке
    k_ = 1 'счетчик
    Do While WorksheetFunction.CountA(Range("B" & r1_ - k_ * n_).Resize(, 5)) = 0 'идем снизу наверх
    hh = r1_ - k_ * n_
        Range("B" & r1_ - k_ * n_).Resize(n_).EntireRow.Delete
        k_ = k_ + 1
    Loop
[/vba]

Автор - _Boroda_
Дата добавления - 12.05.2018 в 22:46
master-dd Дата: Воскресенье, 13.05.2018, 13:18 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 61
Репутация: 0 ±
Замечаний: 0% ±

2016
_Boroda_, СПАСИБО большое! pray 1-й вариант действительно то, что нужно. Просто я даже о таком алгоритме не думал - решал "задачу" в силу своих фактических познаний. Теперь постараюсь понять, как этот код "устроен", чтобы в будущем я мог его трансформировать и применять в других областях! respect
 
Ответить
Сообщение _Boroda_, СПАСИБО большое! pray 1-й вариант действительно то, что нужно. Просто я даже о таком алгоритме не думал - решал "задачу" в силу своих фактических познаний. Теперь постараюсь понять, как этот код "устроен", чтобы в будущем я мог его трансформировать и применять в других областях! respect

Автор - master-dd
Дата добавления - 13.05.2018 в 13:18
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Зацикливание процесса внутри макроса (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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