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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2018, 13:08   #1
ignatenko_e
Пользователь
 
Регистрация: 17.04.2018
Сообщений: 14
По умолчанию два макроса (скрыть и удалить) колонки с 0

Здравствуйте!
макросы только начала изучать((( не могу понять почему макрос СКРЫТЬ 0 колонок срабатывает правильно:
Код:
Sub скрытьстолб()
Dim r As Range
  Application.ScreenUpdating = False
  For Each r In Range("B23:M23").Columns
    If WorksheetFunction.CountIf(r, ">0") = 0 Then r.EntireColumn.Hidden = True
  Next
  Application.ScreenUpdating = True
End Sub
а если его переделать на УДАЛЕНИЕ 0 колонок, то не все колонки с 0 удаляются:
Код:
Sub скрытьстолб()
Dim r As Range
  Application.ScreenUpdating = False
  For Each r In Range("B23:M23").Columns
    If WorksheetFunction.CountIf(r, ">0") = 0 Then r.EntireColumn.Delete
  Next
  Application.ScreenUpdating = True
End Sub
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор



спасибо
Вложения
Тип файла: xlsx 1234.xlsx (12.0 Кб, 8 просмотров)

Последний раз редактировалось Serge_Bliznykov; 27.06.2018 в 13:19.
ignatenko_e вне форума Ответить с цитированием
Старый 27.06.2018, 13:23   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от ignatenko_e Посмотреть сообщение
а если его переделать на УДАЛЕНИЕ 0 колонок, то не все колонки с 0 удаляются:
проблема в том, что в цикле изменяется количество обрабатываемых столбцов (и их порядок).
вот смотрите, пусть r - 5-й столбец.
условие WorksheetFunction.CountIf(r, ">0") выполняется,
что происходит с этим столбцом? Верно, он удаляется.
Какой столбец теперь становится 5-м ? 6-й. а 7-й столбец становится 6-м.
А какой столбец в цикле будет обрабатываться следующим? 6-й,
но на месте 6-го стоит 7-й, а 6-й остался на месте 5-го... Его мы пропустили.
и так далее.

Нужно или менять цикл на другой или менять алгоритм обработки.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.06.2018, 13:44   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Это можно сделать так:

Код:
Sub удалитьстолб()
  Dim r As Range, i As Long
  Application.ScreenUpdating = False

  For i = Range("M23").Column To Range("B23").Column Step -1
   Set r = Range(Cells(23, i), Cells(23, i))
   If WorksheetFunction.CountIf(r, ">0") = 0 Then r.EntireColumn.Delete
  Next i
  Application.ScreenUpdating = True
End Sub

или даже так:
Код:
Sub удалитьстолб()
  Dim i As Long
  Application.ScreenUpdating = False

  For i = Range("M23").Column To Range("B23").Column Step -1
   If Cells(23, i).Value <= 0 Then Columns(i).EntireColumn.Delete
  Next i
  Application.ScreenUpdating = True
End Sub
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.06.2018, 14:14   #4
ignatenko_e
Пользователь
 
Регистрация: 17.04.2018
Сообщений: 14
По умолчанию

спасибочки))))
ignatenko_e вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Показать\скрыть два разных DIV kutt JavaScript, Ajax 5 06.03.2011 12:33
Объединить два макроса KOSTIK1 Microsoft Office Excel 3 06.03.2010 22:09
Два одинаковых макроса GES Microsoft Office Excel 2 12.01.2010 11:27
Автоматически скрыть открыть колонки Gennady_58 Microsoft Office Excel 7 12.04.2009 11:07
скрыть процесс выполнения макроса Iskin Microsoft Office Excel 1 21.11.2008 07:28