Здравствуйте! Я нашел макрос который на 99% работает как мне нужно, но есть одна проблемка. Этот макрос скрывает строки (в примере ниже действует начиная со 2-ой строки) если в них в 6-ом столбце в ячейке записано "0". Работает нормально, но если в этот момент например в стобцах 1-5 попадется пустая ячейка, то макрос не работает=( Как сделать, чтобы макрос обращал внимание ТОЛЬКО на 6-ой столбик, и скрывал строки на основании данных только из 6-го столбца! Номер столбца 6 - взят для примера.
[vba]
Code
Private Sub tgbZero_Click() Application.ScreenUpdating = False ' отключаем обновление экрана во время выполнения макроса i = 2 'номер строки, с которой начнется обработка While Not IsEmpty(Cells(i, 2)) ' проверяем каждую строчку пока не встретимся с пустым значением т.е. концом списка If tgbZero Then ' при нажатом положении кнопка tgbZero принимает значениее True Sheets("4646").tgbZero.Caption = "Отобразить все строки" 'меняем надпись на кнопке, чтобы было понятно, что произойдет в следующий раз If Cells(i, 6).Value = 0 Then ' прячем или показываем строки с нулевым значением Rows(i).Hidden = True ' зависимости от значения в ячейке столбца "Кол" Else ' и в зависимости от положения кнопки Rows(i).Hidden = False End If Else Sheets("4646").tgbZero.Caption = "Скрыть нулевые строки" Rows(i).Hidden = False ' режим отображения всех строк в том числе и с нулем End If i = i + 1
Wend Application.ScreenUpdating = False ' включаем обновление экрана во время выполнения макроса End Sub
[/vba]
Здравствуйте! Я нашел макрос который на 99% работает как мне нужно, но есть одна проблемка. Этот макрос скрывает строки (в примере ниже действует начиная со 2-ой строки) если в них в 6-ом столбце в ячейке записано "0". Работает нормально, но если в этот момент например в стобцах 1-5 попадется пустая ячейка, то макрос не работает=( Как сделать, чтобы макрос обращал внимание ТОЛЬКО на 6-ой столбик, и скрывал строки на основании данных только из 6-го столбца! Номер столбца 6 - взят для примера.
[vba]
Code
Private Sub tgbZero_Click() Application.ScreenUpdating = False ' отключаем обновление экрана во время выполнения макроса i = 2 'номер строки, с которой начнется обработка While Not IsEmpty(Cells(i, 2)) ' проверяем каждую строчку пока не встретимся с пустым значением т.е. концом списка If tgbZero Then ' при нажатом положении кнопка tgbZero принимает значениее True Sheets("4646").tgbZero.Caption = "Отобразить все строки" 'меняем надпись на кнопке, чтобы было понятно, что произойдет в следующий раз If Cells(i, 6).Value = 0 Then ' прячем или показываем строки с нулевым значением Rows(i).Hidden = True ' зависимости от значения в ячейке столбца "Кол" Else ' и в зависимости от положения кнопки Rows(i).Hidden = False End If Else Sheets("4646").tgbZero.Caption = "Скрыть нулевые строки" Rows(i).Hidden = False ' режим отображения всех строк в том числе и с нулем End If i = i + 1
Wend Application.ScreenUpdating = False ' включаем обновление экрана во время выполнения макроса End Sub
Application.ScreenUpdating = False ' отключаем обновление экрана во время выполнения макроса Application.ScreenUpdating = False ' включаем обновление экрана во время выполнения макроса
[/vba]
из макроса автора [vba]
Code
Application.ScreenUpdating = False ' отключаем обновление экрана во время выполнения макроса Application.ScreenUpdating = False ' включаем обновление экрана во время выполнения макроса
Вы проверку запускаете по двум столбцам (B и F), а хотите, чтобы макрос смотрел на один. Так не бывает.
Спасибо исправил! Ввел переменную "b" - теперь она означает за выбор столбца. У меня 1500 строк и макрос на поиски и скрытие строк тратит 60 сек!! Т.е. 0.04 сек на строку. Это нормально? Как сделать чтоб не тормозило? Для такой простейшей операции мой комп более чем мощный
Quote (RAN)
Вы проверку запускаете по двум столбцам (B и F), а хотите, чтобы макрос смотрел на один. Так не бывает.
Спасибо исправил! Ввел переменную "b" - теперь она означает за выбор столбца. У меня 1500 строк и макрос на поиски и скрытие строк тратит 60 сек!! Т.е. 0.04 сек на строку. Это нормально? Как сделать чтоб не тормозило? Для такой простейшей операции мой комп более чем мощныйГость
60 секунд на 1500 строк - это очень долго! Но без вашего примера разбираться вряд ли кто-то станет подробно.
Quote (Гость)
Sheets("4646").tgbZero
Вы нам предлагаете самим составить за вас таблицу, на листе 4646 сделать ToggleButton и разбираться? Выложите пример (никто же не просит всю книгу со всеми данными... достаточно только фрагмент с влияющими и зависимыми данными, а вдруг у вас там не макрос, а формулы тормозят?). Народ посмотрит.
60 секунд на 1500 строк - это очень долго! Но без вашего примера разбираться вряд ли кто-то станет подробно.
Quote (Гость)
Sheets("4646").tgbZero
Вы нам предлагаете самим составить за вас таблицу, на листе 4646 сделать ToggleButton и разбираться? Выложите пример (никто же не просит всю книгу со всеми данными... достаточно только фрагмент с влияющими и зависимыми данными, а вдруг у вас там не макрос, а формулы тормозят?). Народ посмотрит.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Четверг, 09.02.2012, 10:08
Private Sub tgbZero_Click() Application.ScreenUpdating = False ' отключить обновление экрана With Sheets("4646").tgbZero If .Value Then ' если кнопка нажата Cells.EntireRow.AutoFit ' показать все строки .Caption = "Скрыть нулевые строки" ' сменить надпись на кнопке Else ' если кнопка не нажата For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row ' цикл со строки 2 до последней, в которой заполнена ячейка в столбце B (=2) Rows(i).Hidden = Cells(i, 6).Value = 0 ' если в столбце F (=6) в ячейке 0, то скрыть строку Next i .Caption = "Отобразить все строки" ' сменить надпись на кнопке End If End With Application.ScreenUpdating = True ' включить обновление экрана End Sub
[/vba]
Гость, попробуйте так:[vba]
Code
Private Sub tgbZero_Click() Application.ScreenUpdating = False ' отключить обновление экрана With Sheets("4646").tgbZero If .Value Then ' если кнопка нажата Cells.EntireRow.AutoFit ' показать все строки .Caption = "Скрыть нулевые строки" ' сменить надпись на кнопке Else ' если кнопка не нажата For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row ' цикл со строки 2 до последней, в которой заполнена ячейка в столбце B (=2) Rows(i).Hidden = Cells(i, 6).Value = 0 ' если в столбце F (=6) в ячейке 0, то скрыть строку Next i .Caption = "Отобразить все строки" ' сменить надпись на кнопке End If End With Application.ScreenUpdating = True ' включить обновление экрана End Sub
Муля2010, Вообще-то из кода видно, что: 1. Должна быть не CommandButton, а ToggleButton 2. Обработка событий OLE-объектов ведётся в модуле листа, а вы зачем-то засунули код в стандартный модуль.
Вот: исправил тип элемента управления и перенёс код в модуль листа. Всё работает.
Quote (Муля2010)
Я вот пропробовал - не работает
Муля2010, Вообще-то из кода видно, что: 1. Должна быть не CommandButton, а ToggleButton 2. Обработка событий OLE-объектов ведётся в модуле листа, а вы зачем-то засунули код в стандартный модуль.
Вот: исправил тип элемента управления и перенёс код в модуль листа. Всё работает.Alex_ST
а вот так ещё прикольнее: номера столбцов, ячейки которых нужно анализировать, задаются не напрямую цифрами в коде, а примечаниями к ячейкам. Можно эти ячейки с примечаниями двигать мышкой и будут изменяться столбцы, в которых нужно искать пустые строки, и строки, начиная с которых искать.
а вот так ещё прикольнее: номера столбцов, ячейки которых нужно анализировать, задаются не напрямую цифрами в коде, а примечаниями к ячейкам. Можно эти ячейки с примечаниями двигать мышкой и будут изменяться столбцы, в которых нужно искать пустые строки, и строки, начиная с которых искать.Alex_ST
Прошу прощениЯ, но все таки хочу докопаться что у меня не так сделано. Пробовал по всякому, в том числе и так, как у вас. Ваш файл работает, а мой нет. Посмотрите пжт, в чем причина.
Quote (Alex_ST)
ToggleButton
Прошу прощениЯ, но все таки хочу докопаться что у меня не так сделано. Пробовал по всякому, в том числе и так, как у вас. Ваш файл работает, а мой нет. Посмотрите пжт, в чем причина.Муля2010
а вот так ещё прикольнее: столбцы задаются не в коде, а примечаниями к ячейкам. Можно эти ячейки с примечаниями двигать мышкой и будут изменяться столбцы, где искать пустые строки и строки, начиная с которых искать. а вот так ещё прикольнее: столбцы задаются не в коде, а примечаниями к ячейкам. Можно эти ячейки с примечаниями двигать мышкой и будут изменяться столбцы, где искать пустые строки и строки, начиная с которых искать.Alex_ST
а вот так ещё прикольнее: столбцы задаются не в коде, а примечаниями к ячейкам. Можно эти ячейки с примечаниями двигать мышкой и будут изменяться столбцы, где искать пустые строки и строки, начиная с которых искать. а вот так ещё прикольнее: столбцы задаются не в коде, а примечаниями к ячейкам. Можно эти ячейки с примечаниями двигать мышкой и будут изменяться столбцы, где искать пустые строки и строки, начиная с которых искать.Alex_ST
Прошу прощениЯ, но все таки хочу докопаться что у меня не так сделано. Пробовал по всякому, в том числе и так, как у вас. Ваш файл работает, а мой нет. Посмотрите пжт, в чем причина. Цитата, Alex_ST писал(а): ToggleButton
Прошу прощениЯ, но все таки хочу докопаться что у меня не так сделано. Пробовал по всякому, в том числе и так, как у вас. Ваш файл работает, а мой нет. Посмотрите пжт, в чем причина.Муля2010
Наконец то докумекал в чем причина. Еще раз всем спасибо за помощь!
Quote (Муля2010)
Прошу прощениЯ, но все таки хочу докопаться что у меня не так сделано. Пробовал по всякому, в том числе и так, как у вас. Ваш файл работает, а мой нет. Посмотрите пжт, в чем причина. Цитата, Alex_ST писал(а): ToggleButton
Прошу прощениЯ, но все таки хочу докопаться что у меня не так сделано. Пробовал по всякому, в том числе и так, как у вас. Ваш файл работает, а мой нет. Посмотрите пжт, в чем причина.Муля2010
Наконец то докумекал в чем причина. Еще раз всем спасибо за помощь!Муля2010