Игра Combobox'ами

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Dark
Сообщения: 63
Зарегистрирован: 23 июл 2008, 23:21

ЛюдЯ ДобрыЯ подскажите пожалуйста как решить 2 задачки: Вариант который здесь выложен мне уже здесь объясняли теперь нужен обратный процесс, потыркался как мог не получается, спросил у системщиков на работе кое-что получилось, но не совсем то, что хотелось бы видеть. А так как системщики люди очччччччччень занятые, (лишний раз не могут картридж спустится поменять :( ), решил побеспокоить Вас Господа.
Итак:
Есть Combobox1 и Combobox2 в зависимости от выбора значения в Combobox1 меняются значения в Combobox2 (см. пример).На данном примере например при выборе в Combobox1 значения 1, Combobox2 принимает значения А и т.д.Вопрос в том как бы сделать наоборот, при выборе значений из ячейки Combobox2 а,б,в,г или д, Combobox1 принимал соответствующие значения.
[INDENT]Конечно лучше если бы можно было-бы играться 2-я ячейками например при выборе в Combobox1 значений, менялись значения в Combobox2, и при выборе из значений Combobox2 менялись бы значения в Combobox1. [/INDENT] Например при выборе в Combobox2 значения А в Combobox1 вставали бы значения 1,22 и т.д. а так же имелся выбор "Все значения" при котором Combobox1 и Combobox2 вставали в начальные (нулевые) значения и наоборот.
Если 2-й вариант оооооччччччень заморочен, прошу прощения в принципе можно ограничится и первым.
[INDENT]И еще один маленький вопрос как при нажатии на кнопку CommandButton1 сделать чтобы вызывался World документ расположенный например на Рабочем столе.[/INDENT]
[INDENT][INDENT][INDENT]Заранее весьма Благодарен за помощь :D [/INDENT][/INDENT][/INDENT]
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

Есть Combobox1 и Combobox2...
Не совсем понял, что надо.
Но, в любом случае, список соответствий значений комбобоксов надо помещать не в коде:

Код: Выделить всё

        [color=darkblue]Case[/color] 1, 22, 43, 64, 85, 106, 127, 148, 169: ComboBox2.Value = "a"
        [color=darkblue]Case[/color] 2 [color=darkblue]To[/color] 21, 23 [color=darkblue]To[/color] 42, 44 [color=darkblue]To[/color] 63, 65 [color=darkblue]To[/color] 84, 86 [color=darkblue]To[/color] 105, 107 [color=darkblue]To[/color] 126, 128 [color=darkblue]To[/color] 147, 149 [color=darkblue]To[/color] 168, 170 [color=darkblue]To[/color] 189: ComboBox2.Value = "б"
        [color=darkblue]Case[/color] 191 [color=darkblue]To[/color] 201, 203 [color=darkblue]To[/color] 213, 215 [color=darkblue]To[/color] 225, 227 [color=darkblue]To[/color] 237, 239 [color=darkblue]To[/color] 249, 251 [color=darkblue]To[/color] 261, 263 [color=darkblue]To[/color] 273, 275 [color=darkblue]To[/color] 285, 287 [color=darkblue]To[/color] 297, 299 [color=darkblue]To[/color] 309: ComboBox2.Value = "в"
        [color=darkblue]Case[/color] 312 [color=darkblue]To[/color] 317, 320 [color=darkblue]To[/color] 325, 328 [color=darkblue]To[/color] 333, 336 [color=darkblue]To[/color] 341, 344 [color=darkblue]To[/color] 349, 352 [color=darkblue]To[/color] 357, 360 To 365, 368 To 373: ComboBox2.Value = "д"        
а на рабочем листе - так будет намного проще реализовать задуманное.

Вот пример:
Изображение

Код примера:

Код: Выделить всё

[color=darkblue]Dim[/color] stopevents [color=darkblue]As[/color] [color=darkblue]Boolean[/color]

[color=darkblue]Private[/color] [color=darkblue]Sub[/color] ComboBox1_Change()
    [color=darkblue]If[/color] stopevents [color=darkblue]Then[/color] [color=darkblue]Exit[/color] [color=darkblue]Sub[/color]
    stopevents = [color=darkblue]True[/color]
    [color=darkblue]Dim[/color] ra [color=darkblue]As[/color] Range: [color=darkblue]Set[/color] ra = [список!таблица]: [color=darkblue]On[/color] [color=darkblue]Error[/color] [color=darkblue]Resume[/color] [color=darkblue]Next[/color]
    Me.ComboBox2.Value = ra.Columns(1).Find(Me.ComboBox1).Next
    [color=darkblue]If[/color] Err [color=darkblue]Then[/color] Me.ComboBox2 = "Ошибка"
    stopevents = [color=darkblue]False[/color]
[color=darkblue]End[/color] [color=darkblue]Sub[/color]

[color=darkblue]Private[/color] [color=darkblue]Sub[/color] ComboBox2_Change()
    [color=darkblue]If[/color] stopevents [color=darkblue]Then[/color] [color=darkblue]Exit[/color] [color=darkblue]Sub[/color]
    stopevents = [color=darkblue]True[/color]
    [color=darkblue]Dim[/color] ra [color=darkblue]As[/color] Range: [color=darkblue]Set[/color] ra = [список!таблица]: [color=darkblue]On[/color] [color=darkblue]Error[/color] [color=darkblue]Resume[/color] [color=darkblue]Next[/color]
    v = Me.ComboBox2: Me.ComboBox1.Clear
    [color=darkblue]For[/color] [color=darkblue]Each[/color] cell [color=darkblue]In[/color] ra.Columns(2).Cells
        [color=darkblue]If[/color] cell = v [color=darkblue]Then[/color] Me.ComboBox1.AddItem cell(1, 0)
    [color=darkblue]Next[/color] cell
    Me.ComboBox1.Value = ra.Columns(2).Find(v).Previous
    [color=darkblue]If[/color] Err [color=darkblue]Then[/color] Me.ComboBox1.List = ra.Columns(1).Value
    stopevents = [color=darkblue]False[/color]
[color=darkblue]End[/color] [color=darkblue]Sub[/color]

[color=darkblue]Private[/color] [color=darkblue]Sub[/color] CommandButton1_Click()
    Лист1.Activate: [color=darkblue]Dim[/color] cell [color=darkblue]As[/color] Range: [color=darkblue]Set[/color] cell = Лист1.Range("a" & Rows.Count).End(xlUp)(2, 1)
    cell = Me.ComboBox1: cell.Next = Me.ComboBox2
[color=darkblue]End[/color] [color=darkblue]Sub[/color]

[color=darkblue]Private[/color] [color=darkblue]Sub[/color] UserForm_Initialize()
    stopevents = [color=darkblue]True[/color]
    ComboBox2.AddItem "a": ComboBox2.AddItem "б": ComboBox2.AddItem "в"
    ComboBox2.AddItem "г": ComboBox2.AddItem "д": ComboBox2.AddItem "Все значения"
    stopevents = [color=darkblue]False[/color]
    Me.ComboBox2.ListIndex = Me.ComboBox2.ListCount - 1
[color=darkblue]End[/color] [color=darkblue]Sub[/color]
И еще один маленький вопрос как при нажатии на кнопку CommandButton1 сделать чтобы вызывался World документ расположенный например на Рабочем столе.
Примеры есть здесь:
http://www.programmersforum.ru/showthread.php?t=37071
http://www.programmersforum.ru/showthread.php?t=50634
Макросы для Excel, Word, CorelDRAW. Быстро, профессионально, недорого. http://ExcelVBA.ru/

Благодарности принимаются на кошелёк WebMoney: R318574877619 и Яндекс.Деньги: 41001335672216
Dark
Сообщения: 63
Зарегистрирован: 23 июл 2008, 23:21

Уважаемый EducatedFool, спасибо за ответы!!Что касаемо варианта №2 реализовал, а на счет первого, не совсем,то. Выложил пример 2. Дело в том что при выборе вариантов из ComboBox2 программа совершает выборку ячеек с значением а,б,в,г или д, а ComboBox1 при этом должен показывать значения столбца (ячеек) A1......An (в зависимости от выбранного варианта ComboBox2), (т.е. при выборе в ComboBox2 значения а, в ComboBox1 встают значения 1,22,43,64............., а не все подряд, чтобы в посладствии имелась возможность внести изменения именно в эти ячейки).
[INDENT][INDENT]Спасибо за ответы[/INDENT][/INDENT]
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
И еще один малююююююсенький вопрос. Форму прилогаю.До наступления даты указанной в ячейке с1, Textbox1 должна сообщать желтым задним фоном ( в нашем случае за 7 дней до наступления), но фишка не работает. Подумал что нужно место цифры 7 использовать значение Day но как сделать чтобы было 7 дней??И еще заметил что при выполнении макроса число из Textbox1 встает как "dd.mm.yyyy", а Date как 27.09.2009, т.е. без кавычек думаю из-за этого все и не выходит как их привезти к единому значению, чтобы они видели друг друга?
[INDENT][INDENT]Простите за дурацкие вопросы[/INDENT][/INDENT]
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

а ComboBox1 при этом должен показывать значения столбца (ячеек) A1......An (в зависимости от выбранного варианта ComboBox2), (т.е. при выборе в ComboBox2 значения а, в ComboBox1 встают значения 1,22,43,64............., а не все подряд
А что, мой вариант работает как-то иначе?
Запустил форму, выбрал во 2-м комбобоксе "a", и вот что увидел:

Изображение

Разве не то, что Вы просили?

Все подряд значения появятся в комбобоксе1 только в том случае, если в комбобоксе2 выбрать пункт "Все значения"
(этот пункт отображается по умолчанию при запуске формы)
Макросы для Excel, Word, CorelDRAW. Быстро, профессионально, недорого. http://ExcelVBA.ru/

Благодарности принимаются на кошелёк WebMoney: R318574877619 и Яндекс.Деньги: 41001335672216
Dark
Сообщения: 63
Зарегистрирован: 23 июл 2008, 23:21

ОЙ ПАРДОН НЕ ДОГЛЯДЕЛ!!!! :) ЗАВТРА БУДУ РАЗБИРАТЬСЯ КАК РЕАЛИЗОВАЛИ!!! СПАСИБО БОЛЬШОЕ!!!
Ответить