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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2011, 20:14   #1
wolf05632
Пользователь
 
Регистрация: 03.04.2011
Сообщений: 25
По умолчанию Как заставить combobox запоминать последнее значение?

Привет еще раз! Есть форма. На форме комбобокс со списком из трех фамилий. Как заставить комбобокс запомнить последнюю выбранную фамилию, чтобы при новом запуске макроса она выводилась по умолчанию? Понимаю, что как-то через static, но метод тыка ничего не дал.((( Помогите, пожалуйста!
wolf05632 вне форума Ответить с цитированием
Старый 15.04.2011, 05:24   #2
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,038
По умолчанию

Так, а инициализация формы?
Ципихович Эндрю на форуме Ответить с цитированием
Старый 15.04.2011, 05:58   #3
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

В переменную документа, а при запуске макрос опять её читать
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 15.04.2011, 06:45   #4
wolf05632
Пользователь
 
Регистрация: 03.04.2011
Сообщений: 25
По умолчанию

Ниче не понял... (Три фамилии присваиваются комбобоксу при инициализации формы.(мож надо в чендж?))

Ребят, объясните, пожалуйста, как пятилетнему))
wolf05632 вне форума Ответить с цитированием
Старый 15.04.2011, 14:54   #5
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Объясняю:
Код:
Private Sub UserForm_Initialize()
  ComboBox1.AddItem "Иванов"
  ComboBox1.AddItem "Петров"
  ComboBox1.AddItem "Сидоров"
  
  Dim i As Integer
  On Error Resume Next
  i = CInt(ThisDocument.Variables("ComboboxLastChoice").Value)
  If Err.Number <> 0 Then Err.Clear
  ComboBox1.ListIndex = i
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  Dim var As Variable
  For Each var In ThisDocument.Variables
    If var.Name = "ComboboxLastChoice" Then
      Exit For
    End If
  Next
  If var Is Nothing Then
    ThisDocument.Variables.Add "ComboboxLastChoice", ComboBox1.ListIndex
  Else
    var.Value = ComboBox1.ListIndex
  End If
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 15.04.2011, 20:27   #6
wolf05632
Пользователь
 
Регистрация: 03.04.2011
Сообщений: 25
По умолчанию

Пасиб! Попробую!

ЗЫ: viter.alex
если не затруднит, можете прокомментировать код. Просто мне еще тяжело читать чужие коды...

Последний раз редактировалось wolf05632; 15.04.2011 в 20:58.
wolf05632 вне форума Ответить с цитированием
Старый 16.04.2011, 01:49   #7
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Код:
'Процедура инициализации формы
Private Sub UserForm_Initialize()
  'Заполнение выпадающего списка значениями
  ComboBox1.AddItem "Иванов"
  ComboBox1.AddItem "Петров"
  ComboBox1.AddItem "Сидоров"
  
  'Переменная для записи сохранённого индекса выбранного элемента списка
  Dim i As Integer
  'Директива для обработки ошибки. Говорит компилятору, что при появлении
  'ошибки нужно перейти к выполнению следующей строки кода
  On Error Resume Next
  'В переменную i читается значение переменной ComboboxLastChoice из документа,
  'в котором находится макрос. Если такой переменной в документе ещё нет, то
  'произойдёт ошибка. Именно для отлова этой ошибки и предназначается предыдущая
  'директива. Если такая переменная есть, то её значение будет записано в пере-
  'менную i
  i = CInt(ThisDocument.Variables("ComboboxLastChoice").Value)
  'Если была ошибка, то очищаем её значение
  If Err.Number <> 0 Then Err.Clear
  'Восстанавливаем сохранённый индек выбранного элемента списка. Если значение ещё
  'не сохранялось, то будет установлен первый элемент, иначе - сохранённый
  ComboBox1.ListIndex = i
End Sub

'Процедура, вызываемая перед закрытием формы
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  'Переменная для перебора коллекции переменных документа
  Dim var As Variable
  'Цикл, перебирающий переменные документа в поисках переменной с заданным именем
  For Each var In ThisDocument.Variables
    'Если такая переменная найдена, то выходим из цикла. При этом переменная var
    'будет ссылаться на найденную переменную документа
    If var.Name = "ComboboxLastChoice" Then
      Exit For
    End If
  Next
  'Если переменная var ни на что не ссылается, т.е. переменная с заданным именем не 
  'была найдена, то такую переменную добавляем в переменные документа
  If var Is Nothing Then
    ThisDocument.Variables.Add "ComboboxLastChoice", ComboBox1.ListIndex
  'Если переменная была найдена, то в неё записывается индекс выбранного элемента списка
  Else
    var.Value = ComboBox1.ListIndex
  End If
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 16.04.2011, 10:58   #8
wolf05632
Пользователь
 
Регистрация: 03.04.2011
Сообщений: 25
По умолчанию

Честно говоря, думал, будет легче: типа объявить переменную статик и присвоить ей как-нибудь последнее выбранное значение комбобокса.
СПАСИБО, ОГРОМНОЕ!
wolf05632 вне форума Ответить с цитированием
Старый 06.03.2018, 23:26   #9
Otradnoe_4D
 
Регистрация: 06.03.2018
Сообщений: 8
По умолчанию

Подскажите а как этот код переделать так что бы работало для combobox1, combobox2, combobox3 и так далее)
Otradnoe_4D вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Последнее значение в списке Maruff Microsoft Office Excel 13 16.02.2017 12:43
подскажите как поменять последнее значение на предпоследнее zander Microsoft Office Excel 2 29.09.2009 19:20
Как получить последнее значение при работе программы voron29 Общие вопросы Delphi 1 27.02.2009 12:22
Как выбрать последнее по списку значение? CaustiC Microsoft Office Excel 2 17.11.2008 09:03
Отобразить последнее введенное значение RUBEY Microsoft Office Excel 5 21.03.2007 11:01