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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2010, 06:54   #1
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию combobox : формат данных

Доброго времени всем!
вопрос такой: есть на форме два combobox'са с датами. не могу сравнить значения из них - получается 15.01.2000 больше чем 11.05.2010. он сравнивает по дням. а нужно сперва год, потом месяц, потом день...
мой код:

Код:
If Format(ComboBox2.Value, "dd.mm.yyyy") < Format(ComboBox1.Value, "dd.mm.yyyy") Then ComboBox2.Value = ComboBox1.Value
maksim_serg вне форума Ответить с цитированием
Старый 29.04.2010, 07:04   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
мой код:
Вы сравниваете 2 текстовые строки - поэтому ошибка.

Попробуйте так (сравниваются числовые значения дат):
Код:
If cdate(ComboBox2) < cdate(ComboBox1) Then ComboBox2 = ComboBox1
EducatedFool вне форума Ответить с цитированием
Старый 29.04.2010, 07:31   #3
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

Пишет что не совпадение данных. список в combobox'се получен так:
Код:
Dim AllCells As Range, rCell As Range
Dim NoDupes As New Collection
Dim i As Long, j As Long
Dim Swap1, Swap2, Item

ProgressBar1.Value = 0

TextBox4.Value = Sheets("лист1").Range("M1").Value
n = Range("A2").Value - 1
    
    With Worksheets("лист1")
        Set AllCells = .Range("Y3:Y" & n)
    End With
    On Error Resume Next
    For Each rCell In AllCells
        NoDupes.Add rCell.Value, CStr(rCell.Value)
    Next rCell
    On Error GoTo 0
    For i = 1 To NoDupes.Count - 1
        For j = i + 1 To NoDupes.Count
            If NoDupes(i) > NoDupes(j) Then
                Swap1 = NoDupes(i)
                Swap2 = NoDupes(j)
                NoDupes.Add Swap1, before:=j
                NoDupes.Add Swap2, before:=i
                NoDupes.Remove i + 1
                NoDupes.Remove j + 1
            End If
        Next j
    Next i
    For Each Item In NoDupes
        FormFM.ComboBox1.AddItem Format(Item, "dd.mm.yyyy")
        FormFM.ComboBox2.AddItem Format(Item, "dd.mm.yyyy")
    Next Item
maksim_serg вне форума Ответить с цитированием
Старый 29.04.2010, 07:35   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Пишет что не совпадение данных.
Я сейчас всё брошу, и начну воссоздавать ваш файл со всеми вариантами данных в ячейках - и всё ради того, чтобы проверить ваш код...
Потом ещё надо будет создать форму - в точности такую же, как у вас.

Так что придётся вам подождать...
EducatedFool вне форума Ответить с цитированием
Старый 29.04.2010, 07:42   #5
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

ладно, что нибудь придумаем...
maksim_serg вне форума Ответить с цитированием
Старый 29.04.2010, 08:22   #6
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

В коллекцию вы добавляете строковые значения:

NoDupes.Add rCell.Value, CStr(rCell.Value)

которые попадают потом в комбо.

FormFM.ComboBox1.AddItem Format(Item, "dd.mm.yyyy") - дает другое представление строки, а сравнивать надо даты. Поэтому используйте вариант от EducatedFool.
nilem вне форума Ответить с цитированием
Старый 29.04.2010, 09:52   #7
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Вы сравниваете 2 текстовые строки - поэтому ошибка.

Попробуйте так (сравниваются числовые значения дат):
Код:
If cdate(ComboBox2) < cdate(ComboBox1) Then ComboBox2 = ComboBox1
закрыл - открыл и все заработало...
maksim_serg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Новый формат данных LGA (Linear Graphical Archive) Alex Cones Общие вопросы Delphi 31 30.01.2010 13:41
формат данных Doget SQL, базы данных 0 10.02.2009 06:01
Не меняется формат данных DimEx Microsoft Office Excel 4 06.03.2008 15:17