Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Название темы включает слова - "Помогите", "Спасите", "Срочно"
Название темы не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте >>>правила <<< и заново правильно создайте тему.
 
Опции темы
Старый 06.01.2009, 20:32   #1
Grusha
 
Регистрация: 27.12.2008
Сообщений: 7
Репутация: 10
По умолчанию Формирование 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 в 13:12.
Grusha вне форума  
Старый 07.01.2009, 08:17   #2
Pavel55
Форумчанин
 
Регистрация: 21.08.2007
Сообщений: 292
Репутация: 189
По умолчанию

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

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

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

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

skype: ExcelVBA.ru
По умолчанию

Посмотрите примеры заполнения полей на формах ввода у меня на сайте
(по ссылке - макросы и программы, содержащие формы для ввода и редактирования данных на листе 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 вне форума  
Закрытая тема

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Excel VBA fidot Microsoft Office Excel 1 28.12.2008 20: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


23:33.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.