Remkomplekty.ru

IT Новости из мира ПК
8 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Checkbox vba excel

VBA-Урок 12.2. Элементы управления (Controls)

Элементы управления имеют все виды свойств и много событий связанных с ними, но сейчас мы лишь рассмотрим несколько из них, которые используются в VBA программировании:

Давайте начнем с добавления 3-х элементов управления — Label , TextBox и CommandButton :

Давайте сейчас отредактируем название и свойства этого элемента управления (используя свойство Caption , которое содержит текст). Мы хотим получить следующий результат:

Сейчас, когда мы введем номер и нажмем ОК — ничего не произойдет.

Чтобы создать какое-то событие, мы начнем добавлять событие, которое введет значение из текстового окна в ячейки А1 и закроет Форму.

Вы можете получить доступ к опциям, которые показаны ниже, дважды щелкнув по элементу управления:

Данный выпадающий список содержит различные элементы управления и эту Форму.

Выберите кнопку (Button) и событие Click:

Введенное значение сейчас уже будет сохранено в ячейке А1 перед закрытием этой Формы ( UserForm ).

Добавьте вторую подпись (Label) и измените следующие свойства: Caption , Forecolor (color: red) and Visible (False, чтобы скрыть элемент управления по умолчанию) :

Теперь давайте добавим событие, которое будет запускаться, когда значение в поле будет изменено. Событие отобразит сообщение об ошибке, если значение не является цифровым.

Введенное значение будет тестироваться каждый раз при вводе очередного символа.

Нам еще нужно предотвратить валидацию формы, если значение не является числом.

Для того, чтобы не оставлять правую сторону формы пустой, когда там нет сообщения об ошибке, мы можем уменьшить её размер, откорректировав свойство Width этой формы:

Вы можете скачать Excel файл с примером: userform1.xls

Checkboxes

Далее пример как использовать CheckBox :

Когда чекбокс отмеченный/неотмеченный, значение связанной ячейки может быть изменено из-за использования события Click:

В этом примере, чекбокс стартует неотмеченным, когда Форма открывается впервые.

Чтобы проверить бокс когда значения соответствующих ячеек является & quot; Отмечено & quot;, мы запустим проверку когда форму активировано, используя UserForm_Initialize:

Здесь вы можете посмотреть пример в готовом Excel файле: userform2.xls

Кнопки опций (Option Buttons)

Пользователь может выбрать только одну кнопку-опцию на «группу» в отличие от чекбоксов.

Чтобы создать «группу», сначала вставьте Frame, а затем OptionButton :

Здесь вы можете посмотреть пример в готовом Excel файле: userform3.xls

Как только форма была отправлена, мы введем данные в ячейку, которая связана с названием колонки и row_value chosen.

Для того, чтобы знать какие опции были выбраны, мы могли бы сделать то же самое что и в предыдущем примере (с чекбоксами), но мы используем цикл, чтобы уменьшить размер кода.

Мы собираемся использовать цикл For Each , тип цикла, который мы еще до этого не рассматривали. Этот цикл позволяет выполнять инструкции для каждого объекта в «группе объектов»:

Сейчас эта форма вводит значение «Ячейка выбрана!» в ячейку, которая была выбрана.

Чтобы избежать баги, нам необходимо проверить , что пользователь выбрал правильно с двух наборов опций.

В этом примере, когда форма еще не завершена, кнопка «Подтверждение» («Confirm») появится в сером (будет деактивирована). Это не самое простое решение, но это хороший пример того, почему функции/процедуры является Полезные внутри формы (UserForm).

Измените текст и свойство Enabled , чтобы деактивировать кнопку.

Результат будет следующий:

В предыдущем коде мы использовали два For Each цикла, чтобы получить значение опционных кнопок (option buttons). Сейчас нам нужно использовать те же значения для кнопки «Подтверждение» («Confirm») и событие Click для десяти опций.

Для этого нам не нужно копировать циклы для каждого события, мы вызовем их через функцию.

Начнем с предыдущего кода и модифицируя его, мы достигнем этого результата:

Все что нам осталось сделать, это создать процедуру, которая проверяет , что кнопки опций были выбраны корректно (через вызов двух функций), и которые активируют эту кнопку когда нужно.

Опять же, проверка выполняется в отдельной процедуре, чтобы избежать копирования кода 10 раз для каждого события каждого опционной кнопки:

Checkbox vba excel

Ни как не могу понять, как из макроса узнать состояние объекта CheckBox из «элементов управления» на листе в Excel. Дело-то в том, что CheckBox этот не в UserForm, мало того, он не является формой, и имеет только список events’ов. Можно конечно через события это дело провернуть — править какую-нить ячейку при изменении состояния, а потом ее считывать. Но хоцца по человечачьи все это провернуть.

Подскажите, кто знает. Заранее благодарю.

Kai Dronov
как я понял ты про это??

код:
соответственно вместо Me тебе надо проставить твой Worksheets(«НАЗВАНИЕ_ЛИСТА»)
Если я тебя недопонял — пиши..
Удачи

Swap
Да, ты меня правильно понял Спасибо за подсказку. Долго я думал как енто сделать. И я почти был близок к решению, я делал так:

If Worksheet.CheckBox1.Value = True Then.

Тут ясно. А вот эти объекты управления имеются в какой-нить коллекции? Дело в том, что CheckBox’ов много, и надо проверять их состояние в цикле. Ща поковыряюсь, мож сделаю.

Но если загляните сюда, поделитесь информацией, как это сделать.
Еще раз спасибо!

Вроде Вы правы, да не работает чета. Делаю так (имя листа — «var_list»):

Dim MyControl As Control

For Each MyControl In Worksheets(«var_list»).Controls
If TypeOf MyControl Is CheckBox Then

If MyControl.Value = True Then
MsgBox «Gacha»
Else
MsgBox «Облом»
End If

И говорит: Object doesn’t support this property or method, что как я понимаю значит, что объект Worksheets не обладает свойством или методом Controls.

Насколько я помню, Controls — это для UserForm, а у меня CheckBox на листе, мало того, он не форма, а объект управления. Дык вот, для них, получается подход другой.

Правильно. В Excel все хранится в колекции Worksheet.Shapes
Соответственно и надо проверять:

If TypeOf Worksheets(«var_list»).Shapes.ControlFormat Is CheckBox

Ну перед этим, правда проверить, что:

If Not Worksheets(«var_list»).Shapes.ControlFormat Is Nothing

RayShade
Лана, я сделал через Shapes, и вот что получилось:

Dim MyControl As Variant

For Each MyControl In Worksheets(«var_list»).Shapes
If TypeOf Worksheets(«var_list»).Shapes Is CheckBox Then
MsgBox «Gacha»
End If
Next MyControl

И вот такая шаня не хочет выдавать мне «Gacha», хотя вот такая строка дает результат:

результат как некое число, посчитал объекты — не соврала. Но вот почему нет реакции при проверке на то, является ли объект CheckBox’ом?

Kai Dronov
Насколько я помню, Controls — это для UserForm
Да, у WorkSheet’а екселевского может и не быть такой коллекции (лень проверять, раз оно ругается — значит, точно нет). Я просто хотел сам принцип подсказать — перебор всех контролов, отсев чек-боксов и операция над ними.
А как этот принцип применить к Екселю — вот RayShade подсказал.

Но вот почему нет реакции при проверке на то, является ли объект CheckBox’ом?
For Each MyControl In Worksheets(«var_list»).Shapes
If TypeOf Worksheets(«var_list»).Shapes Is CheckBox Then
MsgBox «Gacha»

Так ты, похоже, просто описАлся — надо проверять TypeOf от MyControl, а ты туда вписал саму коллекцию.

Читать еще:  Импорт таблицы из excel в sql

Попробуй вот так:
If TypeName(MyControl) = «CheckBox» Then.

Не будет такой пример работать Shapes — это коллекция, какой у нее по-вашему Type? Во-вторых, если у вас цикл по MyControl, то где обработка переменной цикла?

Какая версия Excel? В XP есть два типа чекбоксов — один из них ActiveX control, содержится в коллекции OLEObjects, добавляется через панель инструментов Control Toolbox. Другой — через панель Forms, коллекция ActiveSheet.CheckBoxes. Это все легко увидеть, если записать макрос, создавая чекбоксы.

Добавление от 21.10.2002 17:43:

sklm сам исправился имхо можно совсем просто:
For Each MyControl In ActiveSheet.CheckBoxes
.
Next

sklm
На счет «описался» это да, но это все равно ни к чему не привело.

kiwi
Вы абсолютно правы. Во время записи макроса я создал CheckBox — он в коллекции OLEObjects. И у меня почти получилось прочитать коллекцию. Почему почти? Потому что в коллекции мои CheckBox’ы почему-то расположились в каком-то случайном порядке.

Dim MyControl As Object

For Each MyControl In Worksheets(«var_list»).OLEObjects
MsgBox MyControl.Name
Next MyControl

Мало того. Программа выше показывает сколько всего объектов, и как они называются. Я по прежнему не могу выловить тип объекта и очередность. Ведь мне нужен строгий порядок считывания состояния чекбоксов.

Ведь мне нужен строгий порядок считывания состояния чекбоксов.
Тю, а зачем? Нужен порядок — дай своим контролам порядковые номера, точнее, имена вида чекбокс1, чекбокс2 и т.д. и перебирай так:
for i=1 to 10
msgbox Worksheets(«var_list»).OLEObjects(«чекбокс» & i).Name
next
и никаких проблем с определением типа.

В каком порядке перебираются элементы в цикле for each . next, ты в общем случае контролировать не можешь. И не должен делать какие-то предположения о порядке их обхода (имхо)

Добавление от 22.10.2002 15:27:

Кстати о проверке типа контрола. Вот это работает:

For Each v In Worksheets(1).OLEObjects
If TypeName(v.Object) = «CheckBox» Then
MsgBox v.Name
End If
Next

Добавление от 22.10.2002 15:29:

или так:
If TypeOf v.Object Is msforms.CheckBox Then

Добавление от 22.10.2002 16:52:

и еще вдогонку: если каждому чекбоксу прописать LinkedCell, то считывать/задавать значения чекбокса можно будет просто обращаясь к этим связанным ячейкам, не трогая сам чекбокс.

Класс CheckBox — работа с флажками VBA

В этой статье мы рассмотрим такой элемент управления в окне ToolBox, как Флажок, за работу с ним отвечает класс VBA CheckBox. Флажки довольно часто используются на формах, их часто называют “птичками” или “галочками”. Сами по себе объекты vba класса CheckBox являются независимыми друг от друга, и позволяют определить одно из двух состояний: галочка установлена, или галочка снята.

Флажки удобны при составлении опросов, например, из десяти цветов нужно отметить те, которые больше всего нравятся. Собственно, в этой статье мы и попытаемся сделать своеобразный опрос, но пока, давайте рассмотрим основные свойства класса CheckBox:

Name – ну, как всегда, имя объекта

Caption – определяет надпись, которая будет находится возле галочки справа.

TripleState – свойство позволяет определить третье состояние флажка. Как упоминалось выше, компонент vba CheckBox может принимать два значения: галочка установлена (true), галочка снята (false), но можно задать и третье состояние (Null) – в этом случае объект будет серого цвета и будет недоступен. Если это свойство содержит значение false – будут поддерживаться только два состояния, если true – все три.

Value – данное свойство позволяет получить состояние выбора (true, false или Null).

Событие Change класса CheckBox происходит при изменении состояния флажка.

Скажу честно, цель статьи – показать простой пример использования Флажков, поэтому я особо не вникал во все премудрости данного компонента.

И так, цель задания: добавить в проект форму, на ней разместить 12 флажков, разделенных на 4 группы по 3 штуки, Например,

Ну, думаю, вы суть поняли: размещаете надпись, а под ней в столбик флажки. Справа я добавил компонент ListBox – как только мы будем ставить галочку для vba CheckBox, элемент сразу будет добавляться в список, плюс, элемент управлении Флажок сразу будет становится недоступным после выбора (свойство Enabled примет значение False). Еще на форме (UserForm) нам понадобится кнопка, которая будет очищать список, и будет делать доступными все флажки.

Знаю, знаю, пример не столько практичен, сколько теоретичен….

В коде для формы нужно добавить следующие процедуры:

Процедуры от CheckBox1_Change до CheckBox12_Change носят практически один и тот же характер – идет обработка события Change. Если состояние флажка ровно true (вы поставили птичку), то в список ListBox1 с помощью метода AddItem добавляется значение, хранимое в свойстве Caption (надпись рядом с птичкой). Далее происходит присваивание значения False свойству Enabled – делаем объект CheckBox недоступным.

Процедура CommandButton1_Click отвечает за обработку клика по кнопке. Видим, что для каждого флажка свойство Enabled принимает значение True, то есть, он становится доступным. Метод Cleare – полностью очищает список ListBox1.

И так, в этой статье мы кратко рассмотрели работу с классом CheckBox (Флажок) vba языка, да, я рассмотрел довольно простой пример использования, но… не все сразу.

Кстати, пример показанный в статье можно использовать и в Exel и в Word. Сам расчет идет на то, что бы описать базовую информацию по языку VBA, а уже потом переходить к чему-то более сложному. Так, как только я закончу с элементами управления, я перейду к описанию синтаксиса языка VBA, который практически идентичен языку VBScript, но код VBScript может выполняться самостоятельно в теле отдельного файла (сценариях), а VBA – работает в теле документа Microsoft.

Спасибо за внимание. Автор блога Владимир Баталий

Написание кода для кнопки при нажатом checkbox

В общем сабж в следующем

Есть несколько объектов checkbox
если выбран к примеру checkbox1 то при нажатии кнопки commandbutton1
бралось значиние из ячейки С5 и подставлялось в ячейку B9

помогите? как сделать?

вот примерно что у меня получилось, но я не программист))

Чтобы форма при не нажатом checkbox не открывалась
Почему даже когда Checkbox не нажат,то открывается форма 6?Как это исправить,чтобы она не.

При нажатом checkbox сделать неактивную кнопку на другой странице html
при нажатом checkbox сделать неактивную кнопку на другой странице html. Даже если нажат на 1.

Написание кода для кнопки
Как в android studio после добавления кнопки (просто взяли и перетащили на основное окно.

Написание кода кнопки
Здравствуйте, форумчане. Есть сайт ссылка, там есть кнопка "Look at ours campers" "About us"(весь.

можно сделать так

вся петрушка в том, что у меня есть три чекбокса
когда активен первый, два других не активны

далее при нажатии на кнопку, если выбран чекбокс первый, то из листа 1.1 берется значение из ячейки С4 и подставляется в ячейку B19

Добавлено через 8 минут 42 секунды
Так я кое какие значения поменяла и получила вот что, 3 варианта и не один не работает (((

Читать еще:  Сумма нескольких ячеек в excel формула

чтобы появился лист 1.1 нужно в левом нижнем углу переключиться на «Администратор» и ввести пароль olga
тогда все откроет

Добавлено через 35 секунд
сейчас можешь посмотреть у тебя там написано «Специалист»

попал. только не в левом нижнем как у Вас а в меню в «надстройках». щас буду разбираться

Добавлено через 23 минуты 38 секунд
я когда пытаюсь компилировать эту базу здесь

странно. это функция вообще не должна никак влиять(

она у тебя выдает когда ты запускаешь макрос или когда дебагер врубаешь?

Добавлено через 32 минуты 43 секунды
C этим кодом все получилось!
правильный вот!

когда дебагер врубаю.

по началу работало, но удаляло не на той странице
а теперь вообще не удаляет (

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Активация кнопки при отмеченных CheckBox
Ребята здравствуйте! Помогите разобраться , не могу понять почему происходит следующее: .

Ошибка при написание кода с if else
Здраствуйте, при написании кода по формуле появляются ошибки на подобии error: ‘else’ without a.

Выделен checkbox при нажатии кнопки назад в браузере
Собственно сама проблема в заголовке, 1 страница .jsp отмечаю два чекбокса (не больше, дальше.

Появление меню при нажатии правой кнопки на CheckBox’e
как сделать что бы при нажатии правой кнопки на CheckBox’e появлялось меню (add,edit,del).

Скрытие отмеченных строк (с использованием элементов управления Checkbox, или без них)

В прикреплённом файле — 3 варианта реализации:

  • с использованием CheckBox с панели инструментов «Элементы управления»
  • с использованием CheckBox с панели инструментов «Формы»
  • без использования Checkbox — галочки (отметки) ставятся макросом
    (с использованием шрифта Marlett)

Для каждого из вариантов использованы свои макросы, скрывающие и отображающие строки
(в первых двух вариантах требуется ещё и скрывать сами чекбоксы)

В третьем варианте для скрытия строк применён автофильтр.

  • 28857 просмотров

Комментарии

Подскажите, пожалуйста, возможно ли в 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»)

Юля, а какое отношение ваш вопрос имеет к теме статьи?

Макрос для вашего случая (делает выделенные ячейки полужирными)

как написать макрос с помощу которого все ячейки на текущем месте будут менять начертание на полужирный, подскажите

Сергей, я же не телепат, чтобы, не видя вашего файла, подсказать, в чем там проблема, и что написать надо.

В моём же примере всё работает — возьмите код оттуда.
И обратите внимание — чекбоксы (галочки) бывают двух видов, используйте тот код, который идёт для используемых вами чекбоксов.

Если сами не разберетесь — оформляйте заказ, прикрепляйте файл, объясняйте, как что должно работать, — тогда сам все сделаю (не бесплатно)

Доброй ночи!
смотрю и никак не пойму с чекбоксами. имеется ряд столбцов (согласно вашего примера делаем две кнопки — скрыть и отобразить) с яцейки столбцов ставим чек боксы. далее не пойму что и где писать что б работала кнопка спрятать те что без галочки. Помогите пожалуйста если не затруднит (офис 2007 винда 7/64)
С уважением, Сергей!

Вообще-то данные из Access у меня загружаются именно при активации листа, а потом таблицы динамически обновляются и изменяются при переключении по гипперссылкам (своего рода меню такое), при этом один и тот же лист может быть активным, поэтому галочки проставляются как при активации листа, так и при прохождении по пунктам моего меню. Судя по всему ОДИН раз галочки проставить не получится

Код можно писать куда угодно — в любой модуль. Вызывать его можно тоже из любой процедуры.

Вот вариант кода, который не будет удалять элементы ActiveX, и не будет ошибочно ставить галочки в ячейку a1

PS: Зачем каждый раз при активации листа заново проставлять все галочки?
ОДИН РАЗ запустите код (после импорта данных из access) — и больше не надо.

Простите, возникли вопросы, куда писать этот код? Где вызывать процедуры? Почему у меня в книге удалились элементы ActiveX (в основном Data Picker 6.0)? Почему чекбокс стоит в ячейке A1 на всех листах?
P.S. Код сначала вставила в модуль книги, потом перенесла его в обычный, который отвечает за интерфейс и вызвала процедуру в WorkSheet_Activаte

Спасибо Вам, Игорь, огромное. Смотрю на код и понимаю, что сама бы я до такого не додумалась. Вернее гипотетически я понимаю что нужно сделать, а как на VBA записать еще толком не знаю. Еще раз СПАСИБО!

Читать еще:  Vba excel выделить строку

Сделал я вам макрос для замены логических значений на галочки,
без изменения значений в ячейках.
Работает для всех листов активной книги.

Результат (слева — что было, справа — что стало)

Да для простого отображения, не оч. красиво смотрится ИСТИНА или ЛОЖЬ в ячейках, гораздо красивее галочки (а вот какие лучше использовать, подскажите пожалуйста Вы: мне больше понравились те, которые шрифтом делаются, но так, Вы говорите, нужно менять значение ячеек). Так как таблица заполняется данными из БД Access, то ничего естественно менять в данных не нужно, просто показать, причем макрос (т.е. процедура) наверное должен быть глобальным, так как таблицы будут все из БД и в некоторых из них будут логические поля(столбцы). Вообщем при активации листа, после выполнения

А какие «галочки» вас интересуют?
Который выполнены при помощи чекбоксов, или буквой «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, прикрепите пример своего файла, — и вам обязательно помогут изменить код под ваши нужды.

Отличная вещь. А подскажите как сделать чтобы вместо строк скрывались столбцы?

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×