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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2013, 15:38   #1
Zzema
Пользователь
 
Регистрация: 05.02.2013
Сообщений: 15
По умолчанию Макрос Скрытия строк в листе

Идея такая: Хочется, чтобы макрос скрывал строки в которых в столбце А , в ячейках нулевые значения. Нужно, чтобы он запускался автоматически, без вызова макроса...
просто макрос для скрытия строки 1, если А1=0- работает:
Sub Worksheet_Calculate()
If Cells(1, 1).Value = 0 Then
Rows(1).EntireRow.Hidden = True
Else
Rows(1).EntireRow.Hidden = False
End If
End Sub

, когда цикл хотел сделать, начинает зацикливаться, почему?
И как этого избежать?


Sub Worksheet_Calculate()
iFirstRow = 1: iLastRow = 150
For iRow = iFirstRow To iLastRow Step 1
iCellOne = Cells(iRow, 1).Value

If iCellOne = 0 Then
Rows(iRow).EntireRow.Hidden = True
Else
Rows(iRow).EntireRow.Hidden = False
End If
Next


End Sub
Zzema вне форума Ответить с цитированием
Старый 05.10.2013, 15:46   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Потому что скрытие строк вызывает пересчёт, который вызывает скрытие строк...
Отключайте события - application.enableevents=false, в конце включайте.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 05.10.2013, 15:57   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

так будет работать:
Код:
Sub Worksheet_Calculate()
  Application.EnableEvents = False
  For r = 1 To 150
    Rows(r).EntireRow.Hidden = Cells(r, 1) = 0
  Next
  Application.EnableEvents = True
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 05.10.2013, 17:29   #4
Zzema
Пользователь
 
Регистрация: 05.02.2013
Сообщений: 15
По умолчанию

Аааа, думаю, что не так то))
И если значение в столбце А изменится, то будет пересчет?
Мне нужно, чтобы новый нолик, появившийся в столбце А тут же скрылся... А как, там ноль пропадет- автоматически открылся... Без если будет работать?
Zzema вне форума Ответить с цитированием
Старый 05.10.2013, 18:36   #5
Zzema
Пользователь
 
Регистрация: 05.02.2013
Сообщений: 15
По умолчанию

Только этот код для 300 строк работает очень медленно...
Zzema вне форума Ответить с цитированием
Старый 05.10.2013, 18:39   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Отключайте обновление экрана и пересчёт.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 05.10.2013, 18:46   #7
Zzema
Пользователь
 
Регистрация: 05.02.2013
Сообщений: 15
По умолчанию

Так мне это нужно Я сводную таблицу обновляю и хочу, чтобы после обновления все строки скрылись, ненужные мне...
Zzema вне форума Ответить с цитированием
Старый 10.06.2014, 13:54   #8
diffuser
 
Регистрация: 20.05.2014
Сообщений: 8
По умолчанию

IgorGO, здравствуйте!

Мне кажется, что то, что мне необходимо - недалеко от темы.

Необходимо откорректирвоать код:

Код:
Private Sub Worksheet_Calculate()
 Application.EnableEvents = False
Static OldVal1 As Variant, OldVal2 As Variant
If Range("C7").Value <> OldVal1 Then
    OldVal1 = Range("C7").Value
    Range("L7") = 1
If [L7] = "1" Then Range("D7:E7,J7").ClearContents
Range("L7") = 0
End If
 Application.EnableEvents = True
End Sub
Чтобы он выполнялся по всем строкам, к примеру от 7й до 100й. На 7й я сделал, но это примитивно, далеко не уйдешь.

Не могу никак внедрить For r = ... To ...
diffuser вне форума Ответить с цитированием
Старый 10.06.2014, 16:25   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

а так:
Код:
Private Sub Worksheet_Calculate()
  Application.EnableEvents = False
  Static OldVal1 As Variant, OldVal2 As Variant
  dim r as long
  for r = 7 to 100
    If cells(r,3).Value <> OldVal1 Then
      OldVal1 = cells(r,3).Value
      cells(r,12) = 1
      If cells(r,12) = "1" Then cells(r,4).resize(1,2).ClearContents: cells(r,10).ClearContents
      cells(r,12) = 0
    End If
  next
  Application.EnableEvents = True
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 11.06.2014 в 10:10.
IgorGO вне форума Ответить с цитированием
Старый 10.06.2014, 16:44   #10
diffuser
 
Регистрация: 20.05.2014
Сообщений: 8
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
а так:
Код:
Private Sub Worksheet_Calculate()
  Application.EnableEvents = False
  Static OldVal1 As Variant, OldVal2 As Variant
  dim r as long
  for r = 7 to 100
    If cells(r,3).Value <> OldVal1 Then
      OldVal1 = cells(r,3).Value
      cells(r,12) = 1
    If cells(r,12) = "1" Then cells(r,4).resize(1,2).ClearContents: cells(r,10).ClearContents
      cells(r,12) = 0
    End If
  next
  Application.EnableEvents = True
End Sub
Кажется, что прекрасно, только вот видимо я забыл уточнить. Необходимо очищать только те ячейки колонок D, E и J, в строке которых изменилось значение в столбце С. А по вашему макросу - очищается весь диапазон D7:E100, J7:J100, если произошло изменение хоть в одной строке столбца С

Т.е. условно говоря - меняется значение в С7 - очищаем D7:E7,J7. Меняется С8 - очищаем D8:E8,J8. И так далее. Спасибо вам за помощь! Долго ищу решение.
diffuser вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
кнопка скрытия и восстановления строк по условию CooLEO Microsoft Office Excel 16 06.08.2013 14:10
макрос скрытия на защищённые ячейки kartol Microsoft Office Excel 2 24.09.2012 09:13
Макрос для скрытия листов в Excel Степан777 Microsoft Office Excel 2 02.03.2012 22:36
макрос для скрытия и показа строк в выбранном диапазоне шрк Microsoft Office Excel 2 04.11.2011 11:30
Макрос поиска текста на листе Movled Microsoft Office Excel 11 29.07.2010 11:59