1. кнопка "съесть/выплюнуть" не работает, если верхнюю "сигнальную" (с "аргументами") строку скрыть или сделать нулевой высоты вручную
2. по п.2. нужно сделать со строками тоже самое, что и со столбцами - срывать (например, по кнопке, другой, новой, дополнительной - функция будет добавлена в существующий рабочий макрос) просто кроме условия наличия в соответствующей ячейке первого столбца "A" любого символа (т.е. эта ячейка не пуста) нужно дополнить ещë одним условием (через логическое "и") - наличием нуля в ячейке из заданного столца (в данном случае столбец "К"
3. нужна команда выделения и копирования в буфер обмена области К12:L21 (это для данного файла - в рабочем файле область будет другая) (команда будет добавлена в существующий макрос в дополнение к делающимся расчетам, результаты которых попадают в указанную область)
Цитата (_Boroda_)
И вообще оба пункта 2 не совсем ясны.
1. кнопка "съесть/выплюнуть" не работает, если верхнюю "сигнальную" (с "аргументами") строку скрыть или сделать нулевой высоты вручную
2. по п.2. нужно сделать со строками тоже самое, что и со столбцами - срывать (например, по кнопке, другой, новой, дополнительной - функция будет добавлена в существующий рабочий макрос) просто кроме условия наличия в соответствующей ячейке первого столбца "A" любого символа (т.е. эта ячейка не пуста) нужно дополнить ещë одним условием (через логическое "и") - наличием нуля в ячейке из заданного столца (в данном случае столбец "К"
3. нужна команда выделения и копирования в буфер обмена области К12:L21 (это для данного файла - в рабочем файле область будет другая) (команда будет добавлена в существующий макрос в дополнение к делающимся расчетам, результаты которых попадают в указанную область)карандаш
Sub skr_stolb_b() Application.ScreenUpdating = 0 b_ = "b" bn_ = WorksheetFunction.CountIf(Rows("1:1"), b_) If bn_ = 0 Then Exit Sub On Error Resume Next x_ = Rows("1:1").SpecialCells(xlCellTypeVisible).Find(What:="b").Column On Error GoTo 0 If x_ > 0 Then c1_ = Cells(1, Columns.Count).End(xlToLeft).Column For i = 2 To c1_ If Cells(1, i) = b_ Then Columns(i).EntireColumn.Hidden = True Next i Else For j = 1 To bn_ cn_ = WorksheetFunction.Match(b_, Range(Cells(1, cn1_ + 1), Cells(1, Columns.Count)), 0) cn1_ = cn_ + cn1_ Columns(cn1_).EntireColumn.Hidden = False Next j End If Application.ScreenUpdating = 1 End Sub
[/vba]
это код скрытия/показа столбцов, отмеченных определëнным знаком
2. можно ли передавать аргумент в скобках функии, чтобы использовать еë как универсальную, т.к. есть три разных условия показа (столбцы помечаются соответствующей буквой)?
вот код вызывающий эту функцию [vba]
Код
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) If Target.Address(0, 0) = "A2" Then Cancel = 1 Run "skr_stolb_b" End If End Sub
[/vba] как передать аргумент при вызове функции? попытка завести новую переменную и использовать еë в качестве аргумента привела к ошибке
3. вы использовали кнопку Active X кнопка обычная сразу спрашивает назначение макроса как назначить на актив-кнопку действие? чем они отличаются эти две кнопки (кроме того, что одна - полноценный объект класса кнопки с полями, методами, событиями, а вторая - просто картинка, на которую можно назначить макрос) в использовании эти отличия (какие именно?) как-то сказываются?
прошу прощения - файл в 2010 по правилам прикрепляю 2003
[vba]
Код
Sub skr_stolb_b() Application.ScreenUpdating = 0 b_ = "b" bn_ = WorksheetFunction.CountIf(Rows("1:1"), b_) If bn_ = 0 Then Exit Sub On Error Resume Next x_ = Rows("1:1").SpecialCells(xlCellTypeVisible).Find(What:="b").Column On Error GoTo 0 If x_ > 0 Then c1_ = Cells(1, Columns.Count).End(xlToLeft).Column For i = 2 To c1_ If Cells(1, i) = b_ Then Columns(i).EntireColumn.Hidden = True Next i Else For j = 1 To bn_ cn_ = WorksheetFunction.Match(b_, Range(Cells(1, cn1_ + 1), Cells(1, Columns.Count)), 0) cn1_ = cn_ + cn1_ Columns(cn1_).EntireColumn.Hidden = False Next j End If Application.ScreenUpdating = 1 End Sub
[/vba]
это код скрытия/показа столбцов, отмеченных определëнным знаком
2. можно ли передавать аргумент в скобках функии, чтобы использовать еë как универсальную, т.к. есть три разных условия показа (столбцы помечаются соответствующей буквой)?
вот код вызывающий эту функцию [vba]
Код
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) If Target.Address(0, 0) = "A2" Then Cancel = 1 Run "skr_stolb_b" End If End Sub
[/vba] как передать аргумент при вызове функции? попытка завести новую переменную и использовать еë в качестве аргумента привела к ошибке
3. вы использовали кнопку Active X кнопка обычная сразу спрашивает назначение макроса как назначить на актив-кнопку действие? чем они отличаются эти две кнопки (кроме того, что одна - полноценный объект класса кнопки с полями, методами, событиями, а вторая - просто картинка, на которую можно назначить макрос) в использовании эти отличия (какие именно?) как-то сказываются?
прошу прощения - файл в 2010 по правилам прикрепляю 2003карандаш
переделал функцию скрыть/показать столбцы на скрыть показать строки не работает вот интуитивно переделанный код [vba]
Код
Sub show_hide_rows() Application.ScreenUpdating = 0 b_ = "x" bn_ = WorksheetFunction.CountIf(Columns("A:A"), b_) If bn_ = 0 Then Exit Sub On Error Resume Next x_ = Columns("A:A").SpecialCells(xlCellTypeVisible).Find(What:=b_).Row On Error GoTo 0 If x_ > 0 Then c1_ = Cells(1, Rows.Count).End(xlUp).Row For i = 2 To c1_ If Cells(1, i) = b_ Then Rows(i).EntireRow.Hidden = True Next i Else For j = 1 To bn_ cn_ = WorksheetFunction.Match(b_, Range(Cells(1, cn1_ + 1), Cells(1, Rows.Count)), 0) cn1_ = cn_ + cn1_ Rows(cn1_).EntireRow.Hidden = False Next j End If Application.ScreenUpdating = 1 End Sub
[/vba]
выдает ошибку на строке [vba]
Код
c1_ = Cells(1, Rows.Count).End(xlUp).Row
[/vba] файл прилагаю
переделал функцию скрыть/показать столбцы на скрыть показать строки не работает вот интуитивно переделанный код [vba]
Код
Sub show_hide_rows() Application.ScreenUpdating = 0 b_ = "x" bn_ = WorksheetFunction.CountIf(Columns("A:A"), b_) If bn_ = 0 Then Exit Sub On Error Resume Next x_ = Columns("A:A").SpecialCells(xlCellTypeVisible).Find(What:=b_).Row On Error GoTo 0 If x_ > 0 Then c1_ = Cells(1, Rows.Count).End(xlUp).Row For i = 2 To c1_ If Cells(1, i) = b_ Then Rows(i).EntireRow.Hidden = True Next i Else For j = 1 To bn_ cn_ = WorksheetFunction.Match(b_, Range(Cells(1, cn1_ + 1), Cells(1, Rows.Count)), 0) cn1_ = cn_ + cn1_ Rows(cn1_).EntireRow.Hidden = False Next j End If Application.ScreenUpdating = 1 End Sub
1. Нужно. Это я недоглядел. А вообще, именно так и задумывалось. 2. О какой функции речь? В приведенном коде функций нет вообще. Это код реакции на нажатие правой кнопки мыши. То есть, это только одно действие. Как Вы собираетесь повесить на него несколько вариантов скрытия? Не, ну конечно можно, но тогда нужно прописать еще условие для выбора. Проще наделать кнопок, на каждую повесить макрос skr_stolb_b, skr_stolb_o, skr_stolb_y, ..., в каждом из которых присвоить значению b_ соответствующую букву (именно поэтому и задумывалось то, что написано выше - см. п. 1). 3. На обычную кнопку просто вешайте макрос skr_stolb_b
Цитата (карандаш)
как назначить на актив-кнопку действие?
какое действие, кроме нажатия, Вы хотите назначить на кнопку? Это кнопка, она создана для того, чтобы на нее нажимать. А нажатие там действует автоматом.
Цитата (карандаш)
чем они отличаются эти две кнопки (кроме того, что одна - полноценный объект класса кнопки с полями, методами, событиями, а вторая - просто картинка, на которую можно назначить макрос)
Тем и отличаются - для работы с первой нужно VBA (в явной или скрытой форме), а для работы с другой - штатные средства самого Excel.
Цитата (карандаш)
. кнопка "съесть/выплюнуть" не работает, если верхнюю "сигнальную" (с "аргументами") строку скрыть или сделать нулевой высоты вручную
И не должна. С помощью SpecialCells(xlCellTypeVisible) мы работаем только в видимых ячейках. Файл так и задумывался. что некто ставит нужные буквы и по ним скрывает/показывает. Ели нужно скрыть - сделайте белый шрифт или формат ;;;
Код для скрытия строк [vba]
Код
Sub ttt() Application.ScreenUpdating = 0 r0_ = 12 r1_ = Range("A" & Rows.Count).End(xlUp).Row If r1_ < r0_ Then GoTo A c1_ = 1 c2_ = 11 z_ = "x" For i = r0_ To r1_ If Cells(i, c1_) = z_ And Cells(i, c2_) = 0 Then Rows(i).EntireRow.Hidden = True Next i A: Application.ScreenUpdating = 1 End Sub
[/vba] Первая стока тупо копирует весь диапазон, вторая копирует только видимые ячейки - я не знаю, как надо.
1. Нужно. Это я недоглядел. А вообще, именно так и задумывалось. 2. О какой функции речь? В приведенном коде функций нет вообще. Это код реакции на нажатие правой кнопки мыши. То есть, это только одно действие. Как Вы собираетесь повесить на него несколько вариантов скрытия? Не, ну конечно можно, но тогда нужно прописать еще условие для выбора. Проще наделать кнопок, на каждую повесить макрос skr_stolb_b, skr_stolb_o, skr_stolb_y, ..., в каждом из которых присвоить значению b_ соответствующую букву (именно поэтому и задумывалось то, что написано выше - см. п. 1). 3. На обычную кнопку просто вешайте макрос skr_stolb_b
Цитата (карандаш)
как назначить на актив-кнопку действие?
какое действие, кроме нажатия, Вы хотите назначить на кнопку? Это кнопка, она создана для того, чтобы на нее нажимать. А нажатие там действует автоматом.
Цитата (карандаш)
чем они отличаются эти две кнопки (кроме того, что одна - полноценный объект класса кнопки с полями, методами, событиями, а вторая - просто картинка, на которую можно назначить макрос)
Тем и отличаются - для работы с первой нужно VBA (в явной или скрытой форме), а для работы с другой - штатные средства самого Excel.
Цитата (карандаш)
. кнопка "съесть/выплюнуть" не работает, если верхнюю "сигнальную" (с "аргументами") строку скрыть или сделать нулевой высоты вручную
И не должна. С помощью SpecialCells(xlCellTypeVisible) мы работаем только в видимых ячейках. Файл так и задумывался. что некто ставит нужные буквы и по ним скрывает/показывает. Ели нужно скрыть - сделайте белый шрифт или формат ;;;
Код для скрытия строк [vba]
Код
Sub ttt() Application.ScreenUpdating = 0 r0_ = 12 r1_ = Range("A" & Rows.Count).End(xlUp).Row If r1_ < r0_ Then GoTo A c1_ = 1 c2_ = 11 z_ = "x" For i = r0_ To r1_ If Cells(i, c1_) = z_ And Cells(i, c2_) = 0 Then Rows(i).EntireRow.Hidden = True Next i A: Application.ScreenUpdating = 1 End Sub
Проще наделать кнопок, на каждую повесить макрос skr_stolb_b, skr_stolb_o, skr_stolb_y, ..., в каждом из которых присвоить значению b_ соответствующую букву
да! это логично, просто, ясно, прозрачно и понятно. Это наилучшее решение помогите его реализовать - подскажите, как передать аргумент
Цитата (_Boroda_)
какое действие, кроме нажатия, Вы хотите назначить на кнопку? Это кнопка, она создана для того, чтобы на нее нажимать. А нажатие там действует автоматом.
нажатие и надо. Когда код уже написан, то на макро-кнопку назначается легко - из выпадающего меню. У актив-кнопки не нашел где вызвать меню назначения кода на нажатие. поищу сам
Цитата (_Boroda_)
. кнопка "съесть/выплюнуть" не работает, если верхнюю "сигнальную" (с "аргументами") строку скрыть или сделать нулевой высоты вручную ---------- И не должна. С помощью SpecialCells(xlCellTypeVisible) мы работаем только в видимых ячейках. Файл так и задумывался.
лист должен иметь "защиту от дураков" (в том числе и от самого себя, случайных действий) выделять диапазоны, разрешëнные для редактирования, потом ставить защиту на лист - слишком муторно проще скрыть строку, чтобы случайно не стереть (или, что менее вероятно, добавить) "управляющие" буковки. тем боле, при нужде, проще переставить/отредактировать эту строку - открыл, отредактировал, скрыл. попробую применить ваши строки
вопрос: перед сокрытием строк по составному условию сокрытия их стоит показать - вдруг там после дополнительных расчетов вместо нуля появилось число не нулевое можно тупо скопировать цикл, убрав условия, и поставить Hiden= false но может есть одна команда для диапазона, чтобы их открыть?
Цитата (_Boroda_)
Проще наделать кнопок, на каждую повесить макрос skr_stolb_b, skr_stolb_o, skr_stolb_y, ..., в каждом из которых присвоить значению b_ соответствующую букву
да! это логично, просто, ясно, прозрачно и понятно. Это наилучшее решение помогите его реализовать - подскажите, как передать аргумент
Цитата (_Boroda_)
какое действие, кроме нажатия, Вы хотите назначить на кнопку? Это кнопка, она создана для того, чтобы на нее нажимать. А нажатие там действует автоматом.
нажатие и надо. Когда код уже написан, то на макро-кнопку назначается легко - из выпадающего меню. У актив-кнопки не нашел где вызвать меню назначения кода на нажатие. поищу сам
Цитата (_Boroda_)
. кнопка "съесть/выплюнуть" не работает, если верхнюю "сигнальную" (с "аргументами") строку скрыть или сделать нулевой высоты вручную ---------- И не должна. С помощью SpecialCells(xlCellTypeVisible) мы работаем только в видимых ячейках. Файл так и задумывался.
лист должен иметь "защиту от дураков" (в том числе и от самого себя, случайных действий) выделять диапазоны, разрешëнные для редактирования, потом ставить защиту на лист - слишком муторно проще скрыть строку, чтобы случайно не стереть (или, что менее вероятно, добавить) "управляющие" буковки. тем боле, при нужде, проще переставить/отредактировать эту строку - открыл, отредактировал, скрыл. попробую применить ваши строки
вопрос: перед сокрытием строк по составному условию сокрытия их стоит показать - вдруг там после дополнительных расчетов вместо нуля появилось число не нулевое можно тупо скопировать цикл, убрав условия, и поставить Hiden= false но может есть одна команда для диапазона, чтобы их открыть?карандаш
Сообщение отредактировал карандаш - Среда, 13.02.2013, 18:46
в каждом из которых присвоить значению b_ соответствующую букву
Цитата (карандаш)
У актив-кнопки не нашел где вызвать меню назначения кода на нажатие.
у кнопки актив само начало макроса для нее как пишется? Sub Cb1_Click() Слово "Клик" видите? Вот оно и отвечает за действие, по которому запускается весь нижеследующий код.
Цитата (карандаш)
но может есть одна команда для диапазона, чтобы их открыть?
Конечно. Просто показать все строки столбца А [vba]
Код
Rows.EntireRow.Hidden = False
[/vba]
Цитата (карандаш)
лист должен иметь "защиту от дураков" (в том числе и от самого себя, случайных действий)
вот Вам защита [vba]
Код
rivate Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row <> 1 Then Exit Sub If [A1] = "Пароль" Then Exit Sub Target.Offset(1).Select End Sub
[/vba] До тех пор, пока в ячейку А2 не введено слово "Пароль", первую строку нельзя выделить.
Цитата (карандаш)
выдает ошибку на строке c1_ = Cells(1, Rows.Count).End(xlUp).Row
Конечно. У Cells первый аргумент - строка, второй - столбец. А Вы написали так: ячейка(Строка_№_1, Столбец_с_номером_равным_количеству_строк). Строк больше, чем столбцов и такого столбца просто нет
Цитата (карандаш)
подскажите, как передать аргумент
Цитата (_Boroda_)
в каждом из которых присвоить значению b_ соответствующую букву
Цитата (карандаш)
У актив-кнопки не нашел где вызвать меню назначения кода на нажатие.
у кнопки актив само начало макроса для нее как пишется? Sub Cb1_Click() Слово "Клик" видите? Вот оно и отвечает за действие, по которому запускается весь нижеследующий код.
Цитата (карандаш)
но может есть одна команда для диапазона, чтобы их открыть?
Конечно. Просто показать все строки столбца А [vba]
Код
Rows.EntireRow.Hidden = False
[/vba]
Цитата (карандаш)
лист должен иметь "защиту от дураков" (в том числе и от самого себя, случайных действий)
вот Вам защита [vba]
Код
rivate Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row <> 1 Then Exit Sub If [A1] = "Пароль" Then Exit Sub Target.Offset(1).Select End Sub
[/vba] До тех пор, пока в ячейку А2 не введено слово "Пароль", первую строку нельзя выделить.
Цитата (карандаш)
выдает ошибку на строке c1_ = Cells(1, Rows.Count).End(xlUp).Row
Конечно. У Cells первый аргумент - строка, второй - столбец. А Вы написали так: ячейка(Строка_№_1, Столбец_с_номером_равным_количеству_строк). Строк больше, чем столбцов и такого столбца просто нет_Boroda_
Подскажите пожалуйста, а если хочется спрятать больше одного столбца. В данном коде скрывается лишь один столбец, а хотелось, чтобы скрывались все столбцы с выделенными ячейками...
Цитата (AlexM)
Пробую угадать.
Подскажите пожалуйста, а если хочется спрятать больше одного столбца. В данном коде скрывается лишь один столбец, а хотелось, чтобы скрывались все столбцы с выделенными ячейками...shelesto
Сообщение отредактировал shelesto - Воскресенье, 14.04.2013, 13:05
Насколько я понял, в первую строку в нужные столбцы вводим любой символ и жмем кнопку. Столбцы скрываются. Второй раз жмем кнопку - столбцы показываются.
А если необходимо сделать скрытие столбцов по выделению любых ячеек и той же кнопкой отобразить все скрытые? Пробовал оптимизировать код, но, видимо какого-то слова не хватает...
[vba]
Код
Private Sub Cb1_Click() On Error Resume Next Cb1.Caption = "Съесть" Selection.Columns.EntireColumn.Hidden = True
Насколько я понял, в первую строку в нужные столбцы вводим любой символ и жмем кнопку. Столбцы скрываются. Второй раз жмем кнопку - столбцы показываются.
А если необходимо сделать скрытие столбцов по выделению любых ячеек и той же кнопкой отобразить все скрытые? Пробовал оптимизировать код, но, видимо какого-то слова не хватает...
[vba]
Код
Private Sub Cb1_Click() On Error Resume Next Cb1.Caption = "Съесть" Selection.Columns.EntireColumn.Hidden = True
Разрешите продолжить тему. Можно ли пронумеровать столбцы, например 1, 2, 3, 4, 5 и т.д., и создать несколько кнопок (макросов) с скрытием/отображением необходимых столбцов? При нажатии на кнопку "Отчет № 1" отображаются только столбцы под номерами 1, 5, 10, 29. При нажатии на кнопку "Отчет № 2" отображаются только столбцы под номерами 1, 5, 15, 25. При нажатии на кнопку "Все" отображаются все столбцы 1-30. [admin]
Разрешите продолжить тему. Можно ли пронумеровать столбцы, например 1, 2, 3, 4, 5 и т.д., и создать несколько кнопок (макросов) с скрытием/отображением необходимых столбцов? При нажатии на кнопку "Отчет № 1" отображаются только столбцы под номерами 1, 5, 10, 29. При нажатии на кнопку "Отчет № 2" отображаются только столбцы под номерами 1, 5, 15, 25. При нажатии на кнопку "Все" отображаются все столбцы 1-30. [admin]