цикл по Item в ComboBox - се

Программирование на Visual Basic for Applications
Tron
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 09.07.2007 (Пн) 11:57
Откуда: Санкт-Петербург

цикл по Item в ComboBox - се

Сообщение Tron » 09.07.2007 (Пн) 12:03

Подскажите пожалуйста, никак не сообразить, у меня есть ComboBox, скажем ComboBox1. Еще есть лист в книге Excel и в столбце к примеру 1-м от первой до пятитысячной строке стоят даты, некоторые совпадают ... так вот мне надо заполнить этот комбобокс при старте UserForm датами которые есть в этом диапазоне, без повторений то есть наподобии автофильтра ... заранее благодарен за ответ. я так понимаю просто надо сравнивать каждое новое значение с тем что уже есть в комбобоксе и если совпадений нет то AddItem делать ... :roll:

bi-lya
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 07.08.2006 (Пн) 15:36

Сообщение bi-lya » 09.07.2007 (Пн) 13:38

Берем начальную дату и прогоняем через диапазон. Если найденное значение есть - записываем, прибавляем день - и снова
Код: Выделить всё
Dim fDate As Date

With ActiveSheet.Range("a1:a5000")

fDate = "01.01.2000"

    Do Until fDate = Date
        Set FoundValue = .Find(fDate, LookIn:=xlValues)
        If Not FoundValue Is Nothing Then
            msg = msg & fDate & vbCrLf
        End If
       
        fDate = fDate + 1
   
    Loop
   
End With

MsgBox msg

Пять тысяч - это больше 13 лет, поэтому для периода меньшего 13 лет лучший вариант такой, IMHO

Tron
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 09.07.2007 (Пн) 11:57
Откуда: Санкт-Петербург

Сообщение Tron » 09.07.2007 (Пн) 14:20

bi-lya

спасибо!
все вроде ничего но как то долго .... find может все тормозит .... а не подскажешь, какое нибудь значение как сравнить с значениями комбобокса?

bi-lya
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 07.08.2006 (Пн) 15:36

Сообщение bi-lya » 10.07.2007 (Вт) 1:02

В этом конкретном случае - я думаю - не нужно огород городить, убирать то, что есть в комбобоксе, а загружать этим кодом. Т.е. вставляем вместо
Код: Выделить всё
           msg = msg & fDate & vbCrLf
Код: Выделить всё
ComboBox1.AddItem CStr(fDate)

А вообще, сравнивать можно так:
Код: Выделить всё
For i = 0 To ComboBox1.ListCount - 1
    If ComboBox1.List(i) = "......" Then MsgBox ""
Next

А насчет того, что долго - чем меньше и точнее стоит период, тем быстрее, ест-но. Здесь обозначен период в 8,5 лет, смотрите какой вам нужен

Tron
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 09.07.2007 (Пн) 11:57
Откуда: Санкт-Петербург

Сообщение Tron » 10.07.2007 (Вт) 14:20

bi-lya спасибо большое! буду думать ))


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList