вопрос по DTPicker

Автор Илья, 23 мая 2014, 10:40

Илья

Почему значение ячейки А1 не равно значению ячейки В1 (см. вложение)?

В ячейку "В1" значение заносится DTPicker-ом.

[вложение удалено администратором]

Администратор

Пункт 1

Элемент управления "DTPicker" продаётся с программой "MS Access". У меня не установлена программа "MS Access", поэтому полноценно не могу посмотреть Ваш пример.

Пункт 2

Формат даты:
в ячейке "A1" - дата;
в ячейке "B1" - текст.

Для Excel это разные данные и Excel не может их сравнить, поэтому две даты в двух ячейках не равны.

Как я увидел, что даты в этих двух ячейках имеют разный тип данных. Я сделал формат ячеек "Общий" и дата в ячейке "A1" была превращена в число, а в ячейке "B1" дата осталась в виде даты.

Решение проблемы:

  • помещайте даты одинаково в Excel; или
  • после помещения данных в Excel, преобразуйте их к одному типу данных; или
  • измените Excel-формулу, чтобы формула приводила данные к одному типу данных, а потом сравнивала.



Илья

2.после помещения данных в Excel, преобразуйте их к одному типу данных;

Пытался так: Range("B1") = Format(CDate(TextBox1.Value), "dd/mm/yyyy")
                      Range("B1").NumberFormat = "m/d/yyyy"
- не помогает.

Администратор

Пункт 1

Дату в Excel в текстовом виде уже нельзя преобразовать в тип данных "Дата", поэтому это не поможет:
Range("B1").NumberFormat = "m/d/yyyy"


Пункт 2

Не используйте здесь "Format":
Range("B1") = Format(CDate(дата.Value), "dd/mm/yyyy")

т.к. "Format" переводит тип данных в тип данных "Текст".

Илья

Вот так вроде работает: Range("B1") = CDate(дата.Value)
И без разницы как я ввожу дату в TextBox: 25.05.2014; 25/05/2014 или 25/6/14.

Администратор

Илья, VBA и Excel, когда видят данные, то начинают их анализировать по каким-то правилам, которые, наверное, нигде не написаны. Видимо, компьютер смотрит, какие есть символы в данных, если данные могут соответствовать дате, то данные воспринимаются как дата.

Илья

Обратил внимание на то, что DTPicker вместе с датой добавляет в ячейку и время! Поэтому ячейки не идентичны друг другу!

Илья

Не стал мучится с DTPicker... заменил его на TextBox, а в коде прописал следующее: Range("B1") = CDate(Me.TextBox1). Для удобства и эстетической красоты добавил форму с календариком.
Смотрим приложение.

[вложение удалено администратором]