Здравствуйте. Скажите, пожалуйста, как сделать так, чтобы при одном нажатии кнопки ячейке A2 присваивался текстовый формат, при втором это присвоение отменялось? Причём код на задание формата я даже на этом форуме видел, но не пойму, как сделать на одной кнопке два действия. Помогите, пожалуйста.
Здравствуйте. Скажите, пожалуйста, как сделать так, чтобы при одном нажатии кнопки ячейке A2 присваивался текстовый формат, при втором это присвоение отменялось? Причём код на задание формата я даже на этом форуме видел, но не пойму, как сделать на одной кнопке два действия. Помогите, пожалуйста.Фомулист
Фомулист, тригер имеет два состояния и перед переключеним производится оценка состояния и изменени й его на противоположное. Соотвтевенно смотрит на состояние того что нужно менять на противоположное и меняйте.
Фомулист, тригер имеет два состояния и перед переключеним производится оценка состояния и изменени й его на противоположное. Соотвтевенно смотрит на состояние того что нужно менять на противоположное и меняйте.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
В Вашем файле - всё супер! НО когда я скопировал макрос и кнопку в свой файл, то при запуске получаю ошибку "Невозможно получить свойство DrawongObjects класса Worksheet Файл свой прилагаю. Помогите, пожалуйста преодолеть эту ошибку.
В Вашем файле - всё супер! НО когда я скопировал макрос и кнопку в свой файл, то при запуске получаю ошибку "Невозможно получить свойство DrawongObjects класса Worksheet Файл свой прилагаю. Помогите, пожалуйста преодолеть эту ошибку.Фомулист
a = InputBox("Укажите количество ячеек." & vbLf & _ "Например 20", "Сколько ячеек форматировать?")
apCall = Application.Caller With Sheets("Лист1") If .DrawingObjects(apCall).Caption = "Перейти в текстовый формат" Then .DrawingObjects(apCall).Caption = "Отменить текстовый формат" .DrawingObjects(apCall).Font.ColorIndex = 5 .Range("A38").Resize(a).NumberFormat = "@" Else .DrawingObjects(apCall).Caption = "Перейти в текстовый формат" .DrawingObjects(apCall).Font.ColorIndex = 3 .Range("A38").Resize(a).NumberFormat = "General" End If End With
End Sub
[/vba]
[vba]
Код
Sub Формат() Dim a&, apCall$
a = InputBox("Укажите количество ячеек." & vbLf & _ "Например 20", "Сколько ячеек форматировать?")
apCall = Application.Caller With Sheets("Лист1") If .DrawingObjects(apCall).Caption = "Перейти в текстовый формат" Then .DrawingObjects(apCall).Caption = "Отменить текстовый формат" .DrawingObjects(apCall).Font.ColorIndex = 5 .Range("A38").Resize(a).NumberFormat = "@" Else .DrawingObjects(apCall).Caption = "Перейти в текстовый формат" .DrawingObjects(apCall).Font.ColorIndex = 3 .Range("A38").Resize(a).NumberFormat = "General" End If End With
Gevox, я со своей стороны просто покажу, как можно подсократить код при вашем двухкнопочном варианте (чтобы народ не пугать такими листингами):
[vba]
Код
Sub Кнопка1_Скрытьстолбцы() hideCols True End Sub
Sub Кнопка2_Щелчок() hideCols False End Sub
Sub hideCols(ByVal bln As Boolean) Dim col, arr arr = Array(3, 7, 11, 17, 21, 25, 29, 35, 39, 43, 47, 53, 57, 61, 65, 71, 79, 89, 93, 97, 101, 107, 111, 115) For Each col In arr Columns(col).Hidden = bln Next End Sub
[/vba]
Gevox, я со своей стороны просто покажу, как можно подсократить код при вашем двухкнопочном варианте (чтобы народ не пугать такими листингами):
[vba]
Код
Sub Кнопка1_Скрытьстолбцы() hideCols True End Sub
Sub Кнопка2_Щелчок() hideCols False End Sub
Sub hideCols(ByVal bln As Boolean) Dim col, arr arr = Array(3, 7, 11, 17, 21, 25, 29, 35, 39, 43, 47, 53, 57, 61, 65, 71, 79, 89, 93, 97, 101, 107, 111, 115) For Each col In arr Columns(col).Hidden = bln Next End Sub
Попробовал сделать так с галочкой, макрос работает, но выдает ошибку после каждого нажатия "Run-time error 1004 нельзя установить свойство Show класса Range. Подскажите, пожалуйста, как по красоте сделать. Где можно почитать литературу на эту тему? Private Sub CheckBox1_Click() Columns(3).Hidden = CheckBox1.Value Columns(7).Hidden = CheckBox1.Value Columns(11).Hidden = CheckBox1.Value Columns(17).Hidden = CheckBox1.Value Columns(21).Hidden = CheckBox1.Value Columns(25).Hidden = CheckBox1.Value Columns(29).Hidden = CheckBox1.Value Columns(35).Hidden = CheckBox1.Value Columns(39).Hidden = CheckBox1.Value Columns(43).Hidden = CheckBox1.Value Columns(47).Hidden = CheckBox1.Value Columns(53).Hidden = CheckBox1.Value Columns(57).Hidden = CheckBox1.Value Columns(61).Hidden = CheckBox1.Value Columns(65).Hidden = CheckBox1.Value Columns(71).Hidden = CheckBox1.Value Columns(79).Hidden = CheckBox1.Value Columns(89).Hidden = CheckBox1.Value Columns(93).Hidden = CheckBox1.Value Columns(97).Hidden = CheckBox1.Value Columns(101).Hidden = CheckBox1.Value Columns(107).Hidden = CheckBox1.Value Columns(111).Hidden = CheckBox1.Value Columns(115).Hidden = CheckBox1.Value Columns(3).Show = Not CheckBox1.Value Columns(11).Show = Not CheckBox1.Value Columns(17).Show = Not CheckBox1.Value Columns(21).Show = Not CheckBox1.Value Columns(25).Show = Not CheckBox1.Value Columns(29).Show = Not CheckBox1.Value Columns(35).Show = Not CheckBox1.Value Columns(39).Show = Not CheckBox1.Value Columns(43).Show = Not CheckBox1.Value Columns(47).Show = Not CheckBox1.Value Columns(53).Show = Not CheckBox1.Value Columns(57).Show = Not CheckBox1.Value Columns(61).Show = Not CheckBox1.Value Columns(65).Show = Not CheckBox1.Value Columns(71).Show = Not CheckBox1.Value Columns(79).Show = Not CheckBox1.Value Columns(89).Show = Not CheckBox1.Value Columns(93).Show = Not CheckBox1.Value Columns(97).Show = Not CheckBox1.Value Columns(101).Show = Not CheckBox1.Value Columns(107).Show = Not CheckBox1.Value Columns(111).Show = Not CheckBox1.Value Columns(115).Show = Not CheckBox1.Value End Sub
Попробовал сделать так с галочкой, макрос работает, но выдает ошибку после каждого нажатия "Run-time error 1004 нельзя установить свойство Show класса Range. Подскажите, пожалуйста, как по красоте сделать. Где можно почитать литературу на эту тему? Private Sub CheckBox1_Click() Columns(3).Hidden = CheckBox1.Value Columns(7).Hidden = CheckBox1.Value Columns(11).Hidden = CheckBox1.Value Columns(17).Hidden = CheckBox1.Value Columns(21).Hidden = CheckBox1.Value Columns(25).Hidden = CheckBox1.Value Columns(29).Hidden = CheckBox1.Value Columns(35).Hidden = CheckBox1.Value Columns(39).Hidden = CheckBox1.Value Columns(43).Hidden = CheckBox1.Value Columns(47).Hidden = CheckBox1.Value Columns(53).Hidden = CheckBox1.Value Columns(57).Hidden = CheckBox1.Value Columns(61).Hidden = CheckBox1.Value Columns(65).Hidden = CheckBox1.Value Columns(71).Hidden = CheckBox1.Value Columns(79).Hidden = CheckBox1.Value Columns(89).Hidden = CheckBox1.Value Columns(93).Hidden = CheckBox1.Value Columns(97).Hidden = CheckBox1.Value Columns(101).Hidden = CheckBox1.Value Columns(107).Hidden = CheckBox1.Value Columns(111).Hidden = CheckBox1.Value Columns(115).Hidden = CheckBox1.Value Columns(3).Show = Not CheckBox1.Value Columns(11).Show = Not CheckBox1.Value Columns(17).Show = Not CheckBox1.Value Columns(21).Show = Not CheckBox1.Value Columns(25).Show = Not CheckBox1.Value Columns(29).Show = Not CheckBox1.Value Columns(35).Show = Not CheckBox1.Value Columns(39).Show = Not CheckBox1.Value Columns(43).Show = Not CheckBox1.Value Columns(47).Show = Not CheckBox1.Value Columns(53).Show = Not CheckBox1.Value Columns(57).Show = Not CheckBox1.Value Columns(61).Show = Not CheckBox1.Value Columns(65).Show = Not CheckBox1.Value Columns(71).Show = Not CheckBox1.Value Columns(79).Show = Not CheckBox1.Value Columns(89).Show = Not CheckBox1.Value Columns(93).Show = Not CheckBox1.Value Columns(97).Show = Not CheckBox1.Value Columns(101).Show = Not CheckBox1.Value Columns(107).Show = Not CheckBox1.Value Columns(111).Show = Not CheckBox1.Value Columns(115).Show = Not CheckBox1.Value End SubGevox
Вы чего хотите добиться, так пытаясь использовать Show в данном контексте? Типа "усилить" Hidden что ли? Расскажите, пожалуйста, простыми словами смысл задуманного.
Ну, а по поводу "красивости" и краткости кода - я уже всё показал выше. Здесь тоже можно применить аналогичный цикл по массиву номеров колонок.
Вы чего хотите добиться, так пытаясь использовать Show в данном контексте? Типа "усилить" Hidden что ли? Расскажите, пожалуйста, простыми словами смысл задуманного.
Ну, а по поводу "красивости" и краткости кода - я уже всё показал выше. Здесь тоже можно применить аналогичный цикл по массиву номеров колонок.Gustav
Hidden- скрывает столбцы если галочка есть. Show- раскрывает (показывает) столбцы если галочки нет. Кнопка выполняет свою функцию, но выдает ошибку ,которую можно просто закрыть.
Hidden- скрывает столбцы если галочка есть. Show- раскрывает (показывает) столбцы если галочки нет. Кнопка выполняет свою функцию, но выдает ошибку ,которую можно просто закрыть.Gevox
Сообщение отредактировал Gevox - Четверг, 11.01.2024, 15:21
Кнопка выполняет свою функцию, но выдает ошибку ,которую можно просто закрыть.
Ваша процедура работает ровно до половины, выполняя все Hidden и прерываясь из-за ошибки на первом же Show. Столбцы нормально скрываются (только за счет Hidden), когда в чек-боксе устанавливается "галочка", и нормально опять показываются (тоже только за счет Hidden), когда "галочка" удаляется. Строки с Show здесь не нужны от слова "совсем".
А "красиво" ваша процедура может выглядеть примерно так (как я уже показывал выше): [vba]
Код
Private Sub CheckBox1_Click() Dim col, arr arr = Array(7, 11, 17, 21, 25, 29, 35, 39, 43, 47, 53, 57, 61, 65, 71, 79, 89, 93, 97, 101, 107, 111, 115) For Each col In arr Columns(col).Hidden = CheckBox1.Value Next End Sub
Кнопка выполняет свою функцию, но выдает ошибку ,которую можно просто закрыть.
Ваша процедура работает ровно до половины, выполняя все Hidden и прерываясь из-за ошибки на первом же Show. Столбцы нормально скрываются (только за счет Hidden), когда в чек-боксе устанавливается "галочка", и нормально опять показываются (тоже только за счет Hidden), когда "галочка" удаляется. Строки с Show здесь не нужны от слова "совсем".
А "красиво" ваша процедура может выглядеть примерно так (как я уже показывал выше): [vba]
Код
Private Sub CheckBox1_Click() Dim col, arr arr = Array(7, 11, 17, 21, 25, 29, 35, 39, 43, 47, 53, 57, 61, 65, 71, 79, 89, 93, 97, 101, 107, 111, 115) For Each col In arr Columns(col).Hidden = CheckBox1.Value Next End Sub