Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2014, 11:06   #1
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию Сохранение состояния нескольких checkbox для выбора из combobox

Добрый день!

Имеется форма с 15 checkbox и 1 combobox.
Поставил перед собой задачу реализовать на форме следующую возможность:
1) Пользователь устанавливает галочки на нескольких cheskbox
2) На форме кнопка по которой он может сохранить свой выбор - выдается форма для ввода названия своего выбора. После ввода названия, в combobox добавляется это название (AddItem).
3) Состояния cheskbox`ов должно как-то сохраниться и ассоциироваться при следующем запуске формы с сохраненным в combobox названием. Чтобы при выборе соответствующего Item из combobox расставлялись галочки на cheskbox`ах.
Понимаю как реализовать первые 2 пункта, а с 3 никак не могу домыслить принцип... Может у кого было что-то подобное, или подскажите примерно как это можно сделать? Пример не прикладываю так как мне достаточно будет понять принцип, реализую сам .
MaxxVer вне форума Ответить с цитированием
Старый 06.08.2014, 11:42   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

перехватите событие "закрытие формы" (Private Sub UserForm_QueryClose...) запишите состояние checkbox_в в реестр, или во внешний файл. состояние checkbox_в легко уложить в строку "01011..." или в длинное целое установив (сбросив) соотв. № checkbox_а бит
получить состояние сheckbox_в достаточно 1 раз при инициализации формы

удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 06.08.2014, 11:52   #3
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию

Спасибо! Со строкой "01011..." понял, это идея!, записать строку в txt тоже смогу. Только как лучше реализовать привязку названия в combobox_е со строкой состояний "01011..." - записывать в txt сначала название потом через например знак "_" строку, а потом при инициации извлекать до "_" - названия, а после "_" - строки состояний..? Или есть проще/гибче решение..?
MaxxVer вне форума Ответить с цитированием
Старый 06.08.2014, 12:43   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

предполагаем чекбоксов 15 шт., названы они CheckBox1, CheckBox2, CheckBox3 ... CheckBox15, находятся на форме UserForm1 тогда получить их состояние в строку или в длинное целое можно так:
Код:
Public sState As String, lState As Long

Sub SetCheckBoxState()
  Dim i As Long, n As Long, sL As String, sR As String
  If Len(sState) < 15 Then sState = String(15, "0")
  With UserForm1
    For i = 0 To .Controls.Count - 1
      If .Controls(i).Name Like "CheckBox*" Then
        n = Val(Mid(.Controls(i).Name, 9, 2))
        If n > 1 Then sL = Left(sState, n - 1) Else sL = ""
        If n < Len(sState) Then sR = Right(sState, Len(sState) - n) Else sR = ""
        sState = sL & IIf(.Controls(i).Value, 1, 0) & sR
        lState = IIf(.Controls(i).Value, lState Or 2 ^ (n - 1), lState And 2 ^ 16 - 1 - 2 ^ (n - 1))
      End If
    Next
  End With
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 06.08.2014, 13:03   #5
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию

Ругается на "Val" в строке "n = Val(Mid(.Controls(i).Name, 9, 2))". Довольно сложный алгоритм для моего уровня знаний, не могу сам разобраться...
(Argument not optional)
MaxxVer вне форума Ответить с цитированием
Старый 06.08.2014, 13:34   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

в указанной строке достаточно аргументов и у Mid, и у Val.

ищите проблему сами или покажите файл
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 06.08.2014, 13:44   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

с битами проще работать.
установить ранее записанное в переменную состояние чекбоксов практически та же процедура, только с одной строкой в цикле по контролам:
Код:
.Controls(i).Value = lstate and 2^(n-1) = 2^(n-1)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 08.08.2014, 09:35   #8
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию

Спасибо! Так я и не разобрался с той ошибкой, переписал по своему (через текстовый файл), но всё получилось. Сейчас бьюсь над тем как удалять из txt файла последнюю строку.. Что-то поиск не дал результата.. Не подскажете?
MaxxVer вне форума Ответить с цитированием
Старый 08.08.2014, 09:56   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Переписать всё в новый файл без последней строки.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 08.08.2014, 10:04   #10
MaxxVer
Форумчанин
 
Регистрация: 17.03.2009
Сообщений: 226
По умолчанию

А как обратиться к последней строке?
MaxxVer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление нескольких записей по checkbox soundstorm PHP 19 21.08.2013 14:49
Блок в блоке,сохранение состояния предка temorfeouz HTML и CSS 4 30.09.2011 12:34
сохранение состояния checkbox CodeNOT PHP 6 28.08.2011 01:53
ограничение выбора checkbox kirosin JavaScript, Ajax 5 15.11.2010 21:32
Определение состояния Checkbox по состоянию базы Wi1D БД в Delphi 1 02.11.2009 18:56