Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как приостановить программу? 
:(
    Опции темы
newbie2009
Дата 28.8.2011, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 8.2.2009

Репутация: нет
Всего: нет



Есть такая ситуация:
Прохожусь я по файлику ексель в каком-то столбце, в поисках определенных значений, их я заношу в массив строк.
Далее :
1. создать программно комбобокс и запихнуть туда этот массив. как это сделать?
2. прервать выполнение программы пока не будет выбрано какое-то значение из комбобокса?

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


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

Это сообщение отредактировал(а) newbie2009 - 28.8.2011, 15:49
PM MAIL   Вверх
dorogoyIV
Дата 28.8.2011, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 4
Всего: 46



Цитата(newbie2009 @  28.8.2011,  12:33 Найти цитируемый пост)
Если может кто-то знает, как например , программно создать выпадающий список в какой-то ячейке и потом с этим списком работать...

Код

Sub AddCombo()
 FillRandomRange
 
 Dim x, y, width, height
  
 Cells(3, 5).Select 'на эту ячейку положим комбобокс
 x = Selection.Left
 width = Selection.width
 y = Selection.Top
 height = Selection.height
 
 Dim k
 k = FindValues
 
 ActiveSheet.DropDowns.Add(x, y, width, height).Select
 With Selection
  .ListFillRange = "H1:" & "H" & k
  .LinkedCell = "E2" ' в этой ячейке индекс выбранного элемента комбобокса
                                    ' (поднял выше, что бы видно было)
 End With
 Range("H1:" & "H" & k).Select
End Sub

Function FindValues() As Integer ' ищем нужные значения (например четные)
                                                            ' и заполняем ими диапазон
 Dim k
 k = 0
 
 For i = 1 To 10
  For j = 1 To 3
   If (Cells(i, j) Mod 2 = 0) Then
    k = k + 1
    Cells(k, 8) = Cells(i, j)
   End If
  Next j
 Next i

 FindValues = k ' заодно определим последнюю строку диапазона
End Function

Function FillRandomRange() ' просто заполним диапазон случайными числами
 For i = 1 To 10
  For j = 1 To 3
   Cells(i, j) = Round(Rnd * 15)
  Next j
 Next i
End Function

PM MAIL   Вверх
newbie2009
Дата 29.8.2011, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 8.2.2009

Репутация: нет
Всего: нет



А можно как-то отдельно обратится к списку? т.е. заполнять его как-то отдельно, а не сразу? или как его например заполнить массивом:

Код

Dim m(1) As String
 m(0) = "test"
 m(1) = "test2"
 
 ActiveSheet.DropDowns.Add(x, y, width, height).Select
 With Selection
  .ListFillRange = m
 ' .LinkedCell = "E2" ' ? ???? ?????? ?????? ?????????? ???????? ??????????
                                    ' (?????? ????, ??? ?? ????? ????)
 End With


Не захотел заполнится=(
PM MAIL   Вверх
dorogoyIV
Дата 29.8.2011, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 4
Всего: 46



Код

 .ListFillRange = ... ' здесь должен быть диапазон ячеек (например, как у меня "H1:H...")


а то, что ты хочешь, это на форме надо делать (если я правильно тебя понимаю)
PM MAIL   Вверх
newbie2009
Дата 29.8.2011, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 8.2.2009

Репутация: нет
Всего: нет



По ходу правильно меня поняли=(
ладно тогда выделим какой-то ненужный стоблец черт знает где=)

Спасибо!



Это сообщение отредактировал(а) newbie2009 - 29.8.2011, 11:18
PM MAIL   Вверх
newbie2009
Дата 29.8.2011, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 8.2.2009

Репутация: нет
Всего: нет



Подскажите:
Если я допустим используя процедуру AddCombo создал 2 выпадающих списка в разных ячейках.
Каким образом мне сделать так, что бы если я поменяю какие-то данные в ячейках, что бы данные в первом списке не менялись сразу. Вот пример кода как я хочу сделать, но после выполнения программы, данные в списках одни и теже. Почему?


Код

Sub main()

Call AddCombo(1, 3)

Cells(1, 8) = "test"

Call AddCombo(2, 4)

End Sub



Sub AddCombo(row, k)
 
 Dim x, y, width, height
  
 Cells(row, 2).Select 
 x = Selection.Left
 width = Selection.width
 y = Selection.Top
 height = Selection.height
 
  
 ActiveSheet.DropDowns.Add(x, y, width, height).Select
 With Selection
   .ListFillRange = "H1:" & "H" & k
   .LinkedCell = "E2" 
 End With
 
 
End Sub





Это сообщение отредактировал(а) newbie2009 - 29.8.2011, 12:46
PM MAIL   Вверх
dorogoyIV
Дата 29.8.2011, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 4
Всего: 46



Цитата(newbie2009 @  29.8.2011,  12:45 Найти цитируемый пост)
данные в списках одни и теже. Почему?

потому, что оба комбобокса имеют ссылку на один и тот же диапазон ячеек с данными  smile 
разным контролам присваивай разные диапазоны
PM MAIL   Вверх
newbie2009
Дата 29.8.2011, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 8.2.2009

Репутация: нет
Всего: нет



А не подскажите как считать цвет ячейки?
А то пробывал вот так:

Код

Color = Cells(1, 1).Interior.ColorIndex


Выводите какие-то слишком большие числа....

И как программно получать значения с выпадающих списков?
или как привезать, что бы при выборе какого-то значения из списка, в соседнем столбце появлялось, связанное с ним значение?

Это сообщение отредактировал(а) newbie2009 - 29.8.2011, 14:14
PM MAIL   Вверх
dorogoyIV
Дата 29.8.2011, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 4
Всего: 46



Цитата(newbie2009 @  29.8.2011,  13:53 Найти цитируемый пост)
И как программно получать значения с выпадающих списков?

в ячейке .LinkedCell = "E2" индекс выбранного элемента. отсчитываешь в диапазоне "H1:H..." этот индекс


Цитата(newbie2009 @  29.8.2011,  13:53 Найти цитируемый пост)
Выводите какие-то слишком большие числа....

оттенков много разных  smile 
PM MAIL   Вверх
newbie2009
Дата 29.8.2011, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 8.2.2009

Репутация: нет
Всего: нет



Цитата(dorogoyIV @ 29.8.2011,  14:18)
Цитата(newbie2009 @  29.8.2011,  13:53 Найти цитируемый пост)
И как программно получать значения с выпадающих списков?

в ячейке .LinkedCell = "E2" индекс выбранного элемента. отсчитываешь в диапазоне "H1:H..." этот индекс


Цитата(newbie2009 @  29.8.2011,  13:53 Найти цитируемый пост)
Выводите какие-то слишком большие числа....

оттенков много разных  smile


Отсчитать можно, если бы был 1 диапозон, а так получается 1 сплошной и точно нельзя сказать...
надо тогда получается для каждого нового комбокса делать отдельный стоблец с диапозоном.
Но тогда как узнать какой список к какому столбцу привязан?
PM MAIL   Вверх
dorogoyIV
Дата 29.8.2011, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 4
Всего: 46



да что ты столбцы жалеешь?
выделяй для контролов столбцы по порядку да и все.

например:
первый комбо, индекс в ячейке [2, 5], данные в столбце "H"
второй комбо - индекс в ячейке [2, 6], данные в столбце "I"
...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0775 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.