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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 06.01.2009, 19:32   #1
Grusha
 
Регистрация: 27.12.2008
Сообщений: 7
По умолчанию Формирование ComboBox, VBA, Excel

Формирование ComboBox на основе данных на листе Excel. Только из данных 4 столбца. Начиная со второй строки. Количество строк неизвестно. Дублирование убирается.

ComboBox1.AddItem "не выбрано"
ComboBox1.Value = "не выбрано"

Dim i As Integer
Dim n As Integer
Dim s As Boolean
s = False

Row = 2

Do While ActiveWorkbook.Worksheets("База Данных").Cells(Row, 4) <> ""

SH = ActiveWorkbook.Worksheets("База Данных").Cells(Row, 4)
n = ComboBox1.ListCount



For i = 1 To n
ComboBox1.ListIndex = i
If SH = ComboBox1.Value Then
s = True
End If
Next

If s = False Then
ComboBox1.AddItem SH
End If


Loop


Ругается на ComboBox1.ListIndex = i в цикле For ... Next
пишет: Invalid property value

Что не так делаю?

Последний раз редактировалось Grusha; 07.01.2009 в 12:12.
Grusha вне форума
Старый 07.01.2009, 07:17   #2
Pavel55
Форумчанин
 
Регистрация: 21.08.2007
Сообщений: 292
По умолчанию

Так подойдёт? См. пример
Вложения
Тип файла: rar ComboBox.rar (11.3 Кб, 1326 просмотров)
Pavel55 вне форума
Старый 07.01.2009, 12:13   #3
Grusha
 
Регистрация: 27.12.2008
Сообщений: 7
По умолчанию

Ваш пример работает, спасибо.

И все же интересно очень, что за ошибка у меня в коде?

Подскажите, пожалуйста. Вроде бы все правильно написано.
Grusha вне форума
Старый 07.01.2009, 13:29   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Посмотрите примеры заполнения полей на формах ввода у меня на сайте
(по ссылке - макросы и программы, содержащие формы для ввода и редактирования данных на листе Excel)

Там множество примеров с заполнением Combobox


Цитата:
И все же интересно очень, что за ошибка у меня в коде?
Вот такой код будет работать (хотя он написан не лучшим образом)

Обратите внимание на выделенные строки:

Код:
Private Sub UserForm_Click()
    ComboBox1.AddItem "не выбрано"
    ' ComboBox1.Value = "не выбрано" ' строка не нужна

    Dim i As Integer
    Dim n As Integer
    Dim s As Boolean
    's = False ' строка не нужна

    Row = 2

    Do While ActiveWorkbook.Worksheets("База Данных").Cells(Row, 4) <> ""

        SH = ActiveWorkbook.Worksheets("База Данных").Cells(Row, 4)
        n = ComboBox1.ListCount
        s = False    ' эта строка нужна здесь - внутри цикла, а не перед ним

        For i = 0 To n - 1' индексы в комбобоксе начинаются с нуля
            ComboBox1.ListIndex = i
            If SH = ComboBox1.Value Then
                s = True
            End If
        Next

        If s = False Then
            ComboBox1.AddItem SH
        End If
        
        Row = Row + 1' без этой строки всё время обрабатывается одна и та же ячейка, и код зацикливается

    Loop
End Sub

Ну или даже так:
Код:
Private Sub UserForm_Click()
    ComboBox1.AddItem "не выбрано"
    
    Dim i As Integer, n As Integer, s As Boolean
    Dim cell As Range: Set cell = ActiveWorkbook.Worksheets("База Данных").Cells(2, 4)

    Do While cell.Value <> ""
        s = False    ' эта строка нужна здесь - внутри цикла, а не перед ним
        For i = 0 To ComboBox1.ListCount - 1    ' индексы в комбобоксе начинаются с нуля
            If cell.Value = ComboBox1.List(i) Then s = True
        Next

        If s = False Then ComboBox1.AddItem cell.Value
        Set cell = cell.Offset(1)
    Loop
End Sub
Хотя пример заполнения комбобокса от Pavel55 намного эффективнее (особенно, когда ячеек много)

Последний раз редактировалось EducatedFool; 19.11.2011 в 00:17.
EducatedFool вне форума
Закрытая тема


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Excel VBA fidot Microsoft Office Excel 1 28.12.2008 19:20
VBA Excel ComboBox corsarlt Microsoft Office Excel 2 05.06.2008 23:50
Формирование Excel-документа через OLE-сервер с Unicode-символами sergushkin Microsoft Office Excel 2 13.04.2008 23:04
Формирование из excel в ASCII, у меня он формирует по одному клиенту а в Excel нескол Askat Общие вопросы Delphi 0 18.07.2007 06:28
Формирование отчета в Excel из Delphi Chals Общие вопросы Delphi 1 04.06.2007 19:25