Всем здравствуйте. Помогите подправить Макрос. Нужно чтобы кнопка работала на весь лист и не была привязана к верхним строчкам. А то добавляю сверху или между 2 строчки и кнопка перестаёт работать. И например в строке 8 есть значение 0 оно скрывается а если добавить значение значение 0 например на 17 строчку то это значение не скрывается а надо чтобы значение скрывалось на всём документе) Надеюсь правильно выразил свой вопрос)
Всем здравствуйте. Помогите подправить Макрос. Нужно чтобы кнопка работала на весь лист и не была привязана к верхним строчкам. А то добавляю сверху или между 2 строчки и кнопка перестаёт работать. И например в строке 8 есть значение 0 оно скрывается а если добавить значение значение 0 например на 17 строчку то это значение не скрывается а надо чтобы значение скрывалось на всём документе) Надеюсь правильно выразил свой вопрос)gorkaps
gorkaps, нужно чтобы скрывалось на листе или всё-таки во всём документе (все листы документа)? Правильно ли я понял, сейчас у Вас 8 строк заполнено, но Вы хотите оставить следующие 8 строк пустыми и на 17 строке только написать что-то новая с "0" ? Ваша проверка While Not IsEmpty(Cells(i, 2)) естественно отрежет раньше, либо это условие наступит как уже на 9й строке. Мб Вам что-то типа такого надо? [vba]
Код
Private Sub tgbZero_Click() Application.ScreenUpdating = False ' отключаем обновление экрана во время выполнения макроса 'i = 2 'номер строки, с которой начнется обработка Rows.Hidden = False i_n = Cells(Rows.Count, 1).End(xlUp).Row ' находим самую нижнюю заполненную ячейку в первом столбце For i = 2 To i_n ' проверяем каждую строчку пока не встретимся с пустым значением т.е. концом списка If tgbZero Then ' при нажатом положении кнопка tgbZero принимает значениее True Sheets("Лист1").tgbZero.Caption = "Отобразить все строки" 'меняем надпись на кнопке, чтобы было понятно, что произойдет в следующий раз If Cells(i, 3).Value = 0 Then ' прячем или показываем строки с нулевым значением Rows(i).Hidden = True ' зависимости от значения в ячейке столбца "Кол" Else ' и в зависимости от положения кнопки Rows(i).Hidden = False End If Else Sheets("Лист1").tgbZero.Caption = "Скрыть нулевые строки" Rows(i).Hidden = False ' режим отображения всех строк в том числе и с нулем End If Next i Application.ScreenUpdating = False ' включаем обновление экрана во время выполнения макроса End Sub
[/vba] правда сразу скажу, что пропущенные (пустые) строки тоже будут скрываться поправил. При таком Варианте поиска последней заполненной строки нужно сначала все строки развернуть.
gorkaps, нужно чтобы скрывалось на листе или всё-таки во всём документе (все листы документа)? Правильно ли я понял, сейчас у Вас 8 строк заполнено, но Вы хотите оставить следующие 8 строк пустыми и на 17 строке только написать что-то новая с "0" ? Ваша проверка While Not IsEmpty(Cells(i, 2)) естественно отрежет раньше, либо это условие наступит как уже на 9й строке. Мб Вам что-то типа такого надо? [vba]
Код
Private Sub tgbZero_Click() Application.ScreenUpdating = False ' отключаем обновление экрана во время выполнения макроса 'i = 2 'номер строки, с которой начнется обработка Rows.Hidden = False i_n = Cells(Rows.Count, 1).End(xlUp).Row ' находим самую нижнюю заполненную ячейку в первом столбце For i = 2 To i_n ' проверяем каждую строчку пока не встретимся с пустым значением т.е. концом списка If tgbZero Then ' при нажатом положении кнопка tgbZero принимает значениее True Sheets("Лист1").tgbZero.Caption = "Отобразить все строки" 'меняем надпись на кнопке, чтобы было понятно, что произойдет в следующий раз If Cells(i, 3).Value = 0 Then ' прячем или показываем строки с нулевым значением Rows(i).Hidden = True ' зависимости от значения в ячейке столбца "Кол" Else ' и в зависимости от положения кнопки Rows(i).Hidden = False End If Else Sheets("Лист1").tgbZero.Caption = "Скрыть нулевые строки" Rows(i).Hidden = False ' режим отображения всех строк в том числе и с нулем End If Next i Application.ScreenUpdating = False ' включаем обновление экрана во время выполнения макроса End Sub
[/vba] правда сразу скажу, что пропущенные (пустые) строки тоже будут скрываться поправил. При таком Варианте поиска последней заполненной строки нужно сначала все строки развернуть.Roman777
Много чего не знаю!!!!
Сообщение отредактировал Roman777 - Воскресенье, 05.06.2016, 12:05
Roman777, ммм.... Это напримере я привёт. А так надо чтобы кнопка работала на том листе где стоит эта кнопка. И при добовлении в любом месте значение 0 при нажатии на кнопку значение скрывалась. После нажатия снова на кнопка значение раскрывалось. Ну тоже самое надо но только на весь лист чтобы работала кнопка а не на определённый участок. Эх не знаю ещё как объяснить)
вот
Roman777, ммм.... Это напримере я привёт. А так надо чтобы кнопка работала на том листе где стоит эта кнопка. И при добовлении в любом месте значение 0 при нажатии на кнопку значение скрывалась. После нажатия снова на кнопка значение раскрывалось. Ну тоже самое надо но только на весь лист чтобы работала кнопка а не на определённый участок. Эх не знаю ещё как объяснить)
Karataev, Спасибо) но немного не то) а можно так чтобы строчки пустые не скрывались а скрывалось только значение с 0? И там где я разбросал 0 чтобы там тоже скрывались)
Karataev, Спасибо) но немного не то) а можно так чтобы строчки пустые не скрывались а скрывалось только значение с 0? И там где я разбросал 0 чтобы там тоже скрывались)gorkaps
Pelena, Karataev, вот спасибо Вам) но когда добавляю значение 0 в другие строки по всему листу то они не скрыватся( Мне нужно чтобы работало на весь лист)
Pelena, Karataev, вот спасибо Вам) но когда добавляю значение 0 в другие строки по всему листу то они не скрыватся( Мне нужно чтобы работало на весь лист)gorkaps
If tgbZero.Value = True Then tgbZero.Caption = "Отобразить все строки" Else tgbZero.Caption = "Скрыть нулевые строки" End If
'2 - номер строки, с которой начнется обработка For i = 2 To lr If tgbZero Then ' при нажатом положении кнопка tgbZero принимает значениее True If CStr(Cells(i, 3).Value) <> "" Then If Cells(i, 3).Value = 0 Then ' прячем или показываем строки с нулевым значением Rows(i).Hidden = True ' зависимости от значения в ячейке столбца "Кол" Else ' и в зависимости от положения кнопки Rows(i).Hidden = False End If End If Else Rows(i).Hidden = False ' режим отображения всех строк в том числе и с нулем End If Next i
Application.ScreenUpdating = True ' включаем обновление экрана во время выполнения макроса
End Sub
[/vba]
[vba]
Код
Private Sub tgbZero_Click()
Dim lr As Long, i As Long
Application.ScreenUpdating = False ' отключаем обновление экрана во время выполнения макроса
If tgbZero.Value = True Then tgbZero.Caption = "Отобразить все строки" Else tgbZero.Caption = "Скрыть нулевые строки" End If
'2 - номер строки, с которой начнется обработка For i = 2 To lr If tgbZero Then ' при нажатом положении кнопка tgbZero принимает значениее True If CStr(Cells(i, 3).Value) <> "" Then If Cells(i, 3).Value = 0 Then ' прячем или показываем строки с нулевым значением Rows(i).Hidden = True ' зависимости от значения в ячейке столбца "Кол" Else ' и в зависимости от положения кнопки Rows(i).Hidden = False End If End If Else Rows(i).Hidden = False ' режим отображения всех строк в том числе и с нулем End If Next i
Application.ScreenUpdating = True ' включаем обновление экрана во время выполнения макроса