В прикреплённом файле - 3 варианта реализации:
- с использованием CheckBox с панели инструментов "Элементы управления"
- с использованием CheckBox с панели инструментов "Формы"
- без использования Checkbox - галочки (отметки) ставятся макросом
(с использованием шрифта Marlett)
Для каждого из вариантов использованы свои макросы, скрывающие и отображающие строки
(в первых двух вариантах требуется ещё и скрывать сами чекбоксы)
В третьем варианте для скрытия строк применён автофильтр.
Комментарии
день добрый, использовал ваш третий вариант использования chekbox...мне нужно скопировать лист на котором находится этот макрос, но после копирования все перестает работать, макрос вроде копируется но скрытие больше не работает
Добрый день!
Подскажите, пожалуйста, возможно ли в LinkedCell вместо "ИСТИНА" написать "1" (когда флажок установлен), вместо "ЛОЖЬ" - "2" (флажок снят)?
Здравствуйте, Виктор.
Можно ускорить, если скрывать сразу все строки (одновременно)
Пример кода можно посмотреть здесь:
http://excelvba.ru/code/ConditionalRowsDeleting
возможно, надо будет переделать с проверки значений ячеек на проверку чекбоксов
Здравствуйте! Пробовал разобраться во втором варианте (вкладка "нормальные чекбоксы"). В случае когда большое количество строк с чекбоксами (допустим 150 строк, а не 5 как в примере), макрос для скрытия выполняется очень долго. Тажке, скорость его выполнения почему-то зависит от наличия значений на других листах (чем больше значений на других листах, тем он медленнее). Что можно сделать, чтобы скорость макроса была выше при большом количестве скрываемых строк?
Ну так понятно, что должны быть в книге эти объекты, - и галочка с именем CheckBox1, и подключение с именем "http://excelvba.ru"
А если их нет, - конечно ошибку будет макрос выдавать
Если сами не разберетесь, - можем сделать под заказ
Игорь так же Ошибка "Run-time error 424 object required на строке:
CheckBox1.Enabled = False: ActiveWorkbook.Connections("http://excelvba.ru").Refresh
Может необходимо создание объекта на запрос? ,но я могу быть ошибаться.
Как-то так можно сделать:
Здравствуйте, Игорь.
Помогите пожалуйста с кодом, выдает ошибку 424 ,((
Задача при проставленной галочке в чекбоксе макрос дает запрос, если нет галочки переходим на следующий запрос.
Sub CheckBox()
If CheckBox1.Value = True Then
ActiveWorkbook.Connections("http://excelvba.ru").Refresh
CheckBox1.Enabled = False
End If
End Sub
Sub CheckBox()
If CheckBox2.Value = True Then
ActiveWorkbook.Connections("http://abvlecxe.ru").Refresh
CheckBox1.Enabled = False
End If
End Sub
Если бы так просто. Это поле неактивно (серое) в свойствах чекбокса. Поэтому при сортировке перемещаются только ячейки, чекбоксы на месте стоят.
Как его "пометить", желательно программно - хз.
Обходной вариант - перерисовывать чекбоксы после сортировки, но как отловить эту самую сортировку...
Здравствуйте, Андрей
Выделите все чекбоксы, и в свойствах поменяйте режим привязки к ячейкам (опция «перемещать и изменять вместе с ячейками»)
Подскажите пожалуйста, как привязать чекбокс к ячейке? Проблема в следующем: на листе есть автофильтр один из столбцов которого реализован в виде чекбоксов. все прекрасно работает при фильтрации строк, но если применить сортировку то привязка чекбокса "слетает". Например: Автофильтр 50 строк столбец "А" - чекбоксы связанные (.LinkedCell="$A$2) с ячейками в которые вписаны. После применения сортировки в автофильтре чекбоксы становятся связаны с произвольной ячейкой столбца "А". (чекбокс изначально нарисованный и связанный с ячейкой "А2" после сортировки становится связан с ячейкой "А9", но рисуется по прежнему в "А2")
Юля, а какое отношение ваш вопрос имеет к теме статьи?
Макрос для вашего случая (делает выделенные ячейки полужирными)
Selection.font.bold = TRUE
как написать макрос с помощу которого все ячейки на текущем месте будут менять начертание на полужирный, подскажите
Сергей, я же не телепат, чтобы, не видя вашего файла, подсказать, в чем там проблема, и что написать надо...
В моём же примере всё работает - возьмите код оттуда.
И обратите внимание - чекбоксы (галочки) бывают двух видов, используйте тот код, который идёт для используемых вами чекбоксов.
Если сами не разберетесь - оформляйте заказ, прикрепляйте файл, объясняйте, как что должно работать, - тогда сам все сделаю (не бесплатно)
Доброй ночи!
смотрю и никак не пойму с чекбоксами. имеется ряд столбцов (согласно вашего примера делаем две кнопки - скрыть и отобразить) с яцейки столбцов ставим чек боксы. далее не пойму что и где писать что б работала кнопка спрятать те что без галочки. Помогите пожалуйста если не затруднит (офис 2007 винда 7/64)
С уважением, Сергей!
Вообще-то данные из Access у меня загружаются именно при активации листа, а потом таблицы динамически обновляются и изменяются при переключении по гипперссылкам (своего рода меню такое), при этом один и тот же лист может быть активным, поэтому галочки проставляются как при активации листа, так и при прохождении по пунктам моего меню. Судя по всему ОДИН раз галочки проставить не получится
Код можно писать куда угодно - в любой модуль. Вызывать его можно тоже из любой процедуры.
Вот вариант кода, который не будет удалять элементы ActiveX, и не будет ошибочно ставить галочки в ячейку a1
PS: Зачем каждый раз при активации листа заново проставлять все галочки?
ОДИН РАЗ запустите код (после импорта данных из access) - и больше не надо.
Простите, возникли вопросы, куда писать этот код? Где вызывать процедуры? Почему у меня в книге удалились элементы ActiveX (в основном Data Picker 6.0)? Почему чекбокс стоит в ячейке A1 на всех листах?
P.S. Код сначала вставила в модуль книги, потом перенесла его в обычный, который отвечает за интерфейс и вызвала процедуру в WorkSheet_Activаte
Спасибо Вам, Игорь, огромное. Смотрю на код и понимаю, что сама бы я до такого не додумалась. Вернее гипотетически я понимаю что нужно сделать, а как на VBA записать еще толком не знаю. Еще раз СПАСИБО!
Сделал я вам макрос для замены логических значений на галочки,
без изменения значений в ячейках.
Работает для всех листов активной книги.
Проверяйте:
Результат (слева - что было, справа - что стало)
Да для простого отображения, не оч. красиво смотрится ИСТИНА или ЛОЖЬ в ячейках, гораздо красивее галочки (а вот какие лучше использовать, подскажите пожалуйста Вы: мне больше понравились те, которые шрифтом делаются, но так, Вы говорите, нужно менять значение ячеек). Так как таблица заполняется данными из БД Access, то ничего естественно менять в данных не нужно, просто показать, причем макрос (т.е. процедура) наверное должен быть глобальным, так как таблицы будут все из БД и в некоторых из них будут логические поля(столбцы). Вообщем при активации листа, после выполнения
где LO - объект "умная таблица"
просматриваем таблицу на наличие логических значений и там где ИСТИНА, отображаем галочку, а где ЛОЖЬ - пустая ячейка соответственно, при этом значения в ячейке не меняем, т.к. в БД должны сохраниться логические значения. Но тогда придется с ячейками связывать чекбоксы, а это будет по-любому притормаживать.(Не хотелось бы). Данные будут редактироваться либо формой, либо (что скорее всего) элементами ActiveX над самой таблицей, строки будут изменяться, удаляться или добавляться в таблицу динамически, и только после этого сохраняться обратно в БД.
А какие «галочки» вас интересуют?
Который выполнены при помощи чекбоксов, или буквой «a» шрифтом Marlett?
Сделать-то можно, но это будет макрос, заменяющий в таблице одни значения другими
Обратную операцию (возврат логических значений в ячейки) тоже надо будет делать, при активации любого другого листа?
Создаваемые «галочки» должны менять значение ячеек?
Можно написать макрос, который всем логическим ячейкам назначит белый цвет шрифта, и поверх каждой такой ячейки нарисует чекбокс, связанный с этой ячейкой.
Но - при большом объёме данных это будет заметно тормозить (тысячи графических объектов на листе заметно снизят скорость работы с данными)
Для чего это надо сделать? (для удобства работы, для вывода на печать, ещё что-то?)
Может, есть какой-то более простой способ...
Здравствуйте, Игорь!
У меня такой вопрос, а если необходимо отображать галочки не по щелчку мышки, а сразу при активации листа, как это сделать программно?
То есть имеем ListObject, и в ней определенные столбцы логического типа. При создании и отображении в ячейках пишутся значения true и false соответственно. Можно ли сделать так, чтобы отображались ваши "галочки"? Грубо говоря, нужно обойти все ячейки в таблице (независимо от количества строк и столбцов) и превратить значения true в "галочки"
Здравствуйте, Елена.
Какую ещё мою процедуру, в какой исходный код, зачем?
Я лишь показал вам пример кода VBA для работы с «умной таблицей» (списком Excel 2003).
Этот код не создаёт таблицу, а работает с ней.
Вам на форум по Excel лучше обратиться, - там вам подскажут (я с СУБД пока не дружу).
Да и вопрос ваш не имеет никакого отношения к теме статьи...
А разве она не соэдается динамически? Если нет то как ее создать на указанном или активном листе? Я так поняла, что Вашу процедуру нужно записать в исходном коде нужного мне листа и вызвать ее в Worksheeet_Activate. Мне собственно нужночтобы при выборе листа создавалась таблица с данными из базы данных Access по конкретному запросу. Поскольку аналогичным образом у меня будут открываться почти все листы (динамически и программным кодом VBA создаваться таблицы, элементы управления: текстовые поля, выпадающие списки и др.), то малюсенький пример использования мне бы помог. Если сможете, то помогите, пожалуйста. Связь с БД я использую через ADO (это потому что возможно буду переходить на SQL Server) И еще вопрос по существу, посоветуйте, пожалуйста, как профессионал, какую СУБД лучше использовать вместе с Excel и с помощью чего к ней подключаться. Я много в инете об этом читала, но ответов еа свой вопрос так и нре рнашла, так как в этом вопросе я не специалист. Я понимаю, что все зависит от конкретной задачи. У меня обычная реляционная БД с претензией на объектно-реляционную БД (отсюда и возможный переход на SQL Server)ю Задача - учет торговли и склада (остатки, движение товара и денег) - специфический, поэтому и не использую готовые программы (такие как 1С и т.п.), а пишу сама. Выбор пал на Excel, так как и Вы думаю, что нерешаемых задач в Excele нет (если конечно знать VBA, хотя бы % на 20 от Вашего). Не посчитайте за наглость или за грубую лесть мои высказывания. С уважением, Елена
Если строка Set LO = ActiveSheet.ListObjects(1)
выдаёт такую ошибку, значит, на активном листе Excel нет ни одной «умной таблицы».
Здравствуйте, Игорь.
Похоже, что "умная таблица" оказалась умнее меня :(. Попробовала поюзать ваш код-пример. В строке
Set LO = ActiveSheet.ListObjects(1)
пишет ошибку run-time error '9' Subscript out of range
Что не так?
У меня Office 2010 Windows7
Ой, спасибо, Вам, Игорь, большое за быстрый ответ. Дальше я с этой таблицей сама разбираться буду. Ух, я ее... А то в последнее время только она меня... (Шутка)
Извините за оффтоп и еще раз огромное спасибо
Вот вам пример кода для работы с «умной таблицей»:
(в Excel 2003 эта умная таблица носила название «список»)
Подробнее - во встроенной справке по объекту ListObject
Игорь, огромное Вам СПАСИБО за помощь. Дело в том, что я долгое время не могла решить проблему с CheckBox-ами в ячейках. Сама пробовала, инет перешерстила вдоль и поперек, даже на киберфоруме помощи просила. Ответ один - вставить чекбоксы в ячейку нельзя. А если и можно, то там к координате top привязка. А у меня "умная" или не очень :) динамическая таблица, которая заполняеся из БД Access динамически и мне нужно было выделять определенные строки и обрабатывать их прямо в коде. Вставлять в ячейку контролы и привязывать их руками нереально (так как нужно это в зависимости от количества строк в таблице БД динамически, а это только кодом) Вообщем хочу поблагодарить вас за идею ставить галочки в ячейке шрифтом - идеальный вариант для динамических таблиц. Только вот подсказали бы Вы мне, начинающей в области VBA, как работать с "умной таблицей" как с объектом VBA в коде, то бишь программно. Я просто не могу найти нигде информации: ищу то ли плохо, то ли все не там.
Спасибо, попробуем прикрутить
Да тут нужен гораздо более простой макрос.
Вчера такой делал - код скрывает столбце при двойном щелчке на ячейке:
programmersforum.ru/showpost.php?p=860687&postcount=2
Благодарю за быстрый ответ. Дело в том что имеется таблица с большим кол-вом столбцов, которые необходимо скрывать перед печатью. Было бы удобно чтобы макрос скрывал столбцы если над ними поставить например галочку или определенный набор символов. Если на основе данного макроса это выполнить невозможно, будем дальше шерстить инет.
Смотря какой из трех вариантов вас интересует...
Автофильтр, к примеру, для скрытия столбцов не подойдёт.
Надо переделывать код - а что именно вам надо, я не знаю.
Обратитесь на форумы по Excel, прикрепите пример своего файла, - и вам обязательно помогут изменить код под ваши нужды.
Отличная вещь. А подскажите как сделать чтобы вместо строк скрывались столбцы?
Благодарю, все заработало!
Просто измените в макросе критерий автофильтра - тогда макрос будет скрывать отмеченные строки:
Подскажите пожалуйста, как в третьем варианте сделать скрытие ОТМЕЧЕННЫХ строк, а не скрытие неотмеченных.
Понял, искренне вам благодарен за оказанную помощь.
Для "умных таблиц" надо немножно изменить код - применять автофильтр не к листу, а к таблице:
Пример для третьего варианта, который без использования Checkbox (галочки ставятся макросом с использованием шрифта Marlett)
Благодарю вас за макрос, Игорь. Отличное решение! В Excel 2007, по всей видимости, этот макрос не работает в "умных" таблицах. Есть ли какое-то решение? Хочется оставить и "умную" таблицу и пользоваться этими замечательными кнопками.
Спасибо большое, чувствую что все просто должно быть, но сам допереть не смог )))
За макрос спасибо, просто, гениально и работает.
В третьем варианте "галочка" и есть ни что иное, как самая обычная буква a, только набранная шрифтом Marlett.
Смените шрифт в столбце - и галочки превратятся в буквы.
Касательно третьего варианта, поясните пож-та каким образом "а" заменяется на галочку?
Отправить комментарий