Foreversoft.ru

IT Справочник
0 просмотров
Рейтинг статьи
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

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

Чтобы проверить бокс когда значения соответствующих ячеек является & 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 примеры

If Worksheet.CheckBox1.Value = True Then.

Читать еще:  Указатели мыши в excel

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

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

3. Swap , 19.10.2002 09:28
Kai Dronov
ну дык, правильно ты делал.
с циклом сталкиваться не приходилось, поэтому сходу решения не подскажу.. немного некогда. если никто толкового решения не предложит — в понедельник посмотрю.
4. sklm , 20.10.2002 23:43
Kai Dronov
А вот эти объекты управления имеются в какой-нить коллекции?
Все контролы имеются в коллекции Controls. Можно просто перебирать все контролы, для каждого проверять, является ли он чек-боксом, и если да — то что-то с ним делать. Примерно вот так:

5. Swap , 21.10.2002 10:43
sklm
хех.. вариант..
6. Kai Dronov , 21.10.2002 11:49
sklm

Вроде Вы правы, да не работает чета. Делаю так (имя листа — «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 на листе, мало того, он не форма, а объект управления. Дык вот, для них, получается подход другой.

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

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

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

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

8. Kai Dronov , 21.10.2002 14:35
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’ом?

9. sklm , 21.10.2002 14:39
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, а ты туда вписал саму коллекцию.

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

10. kiwi , 21.10.2002 17:39
Не будет такой пример работать 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

11. RayShade , 22.10.2002 10:57
Kai Dronov
Да потому что надо MyControl объявлять не как Variant a как Shape.
12. kiwi , 22.10.2002 11:25
RayShade, чего вдруг? Переменную в цикле по элементам некоторой коллекции For Each . In . достаточно объявить как Variant или Object, и все будет ок.
13. Kai Dronov , 22.10.2002 15:00
sklm
На счет «описался» это да, но это все равно ни к чему не привело.

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

Dim MyControl As Object

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

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

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

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

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

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

Класс 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

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

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

Visual Basic
27.04.2009, 18:38

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

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

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

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

27.04.2009, 19:072
PureBasic
27.04.2009, 19:093

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

Visual Basic
Visual Basic
27.04.2009, 19:25 [ТС]4
Visual Basic
27.04.2009, 19:335
27.04.2009, 19:59 [ТС]6

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

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

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

Visual Basic
Visual Basic
Visual Basic
27.04.2009, 20:187
27.04.2009, 20:24 [ТС]8
Вложения

macro_3.rar (44.2 Кб, 77 просмотров)
27.04.2009, 20:409
27.04.2009, 20:46 [ТС]10

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

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

27.04.2009, 21:1311

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

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

Visual Basic
28.04.2009, 10:13 [ТС]12

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

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

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

Visual Basic
28.04.2009, 10:1813

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

Visual Basic
28.04.2009, 11:54 [ТС]14
28.04.2009, 13:0415
PureBasic
06.05.2009, 14:36 [ТС]16
Visual Basic
Visual Basic
06.05.2009, 14:4217
06.05.2009, 14:44 [ТС]18

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

06.05.2009, 14:5219
06.05.2009, 14:54 [ТС]20
Visual Basic
06.05.2009, 14:54
06.05.2009, 14:54

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

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

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

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

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

Ссылка на основную публикацию
Adblock
detector