Wewnętrznie Excel przechowuje daty jako liczby. Nie implementuje typu daty. Liczba jest liczbą dni od pewnego momentu w przeszłości (1900 lub 1904, w zależności od systemu operacyjnego, z pewnymi błędami w odniesieniu do lat przestępnych). Czas jest reprezentowany jako ułamkowa część liczby.
Aby wyglądać jak data dla użytkownika, należy przypisać komórce format daty. Następnie liczba jest wyświetlana jako data w komórce. (Excel przypisuje format daty automatycznie jeśli wpiszesz latków że wygląda terminie do programu Excel.)
Podczas korzystania ActiveWorkbook.ActiveSheet.Cells(x,y)
można utworzyć Range
obiekt i wywołać jej domyślną właściwość, która jest Value
. Value
ma wiele wbudowanych magii. W twoim przypadku sprawdza on format komórki i - widząc format daty - przekształca wewnętrznie zapisaną liczbę w datę podtypu na Variant
. Po wyświetleniu go za pomocą okna komunikatu następuje kolejna sztuczka. Jeśli czas jest 0:00, data jest konwertowana na ciąg bez czasu. Jeśli czas był inny niż 0:00, byłby konwertowany na ciąg znaków z datą i godziną. Format daty jest pobierany z ustawień użytkownika. Jest niezależny od formatu daty przypisanego do komórki Excel.
Jeśli używasz Value2
zamiast Value
(np za pomocą pola Wiadom wyświetlać ActiveWorkbook.ActiveSheet.Cells(x,y).Value2
), wtedy zobaczysz wewnętrzną reprezentację daty, a mianowicie liczby.
Podczas edycji komórki program Excel używa jeszcze innego formatu daty, aby można było wyświetlić i edytować wszystkie części daty: rok, miesiąc, dzień i ewentualnie godzinę, minuty i sekundy. Dzieje się tak dlatego, że format daty komórki może być ograniczony tylko do nazwy miesiąca.
Kolejna złożoność jest dodana przez internacjonalizację. Niektóre formaty dat nie są stosowane bezpośrednio, ale stanowią wskazówkę do używania formatu daty z ustawień bieżącego użytkownika.Dlatego format jest najpierw zastępowany innym formatem daty, a następnie stosowany. Ponadto niektóre części formatu daty i czasu zależą od ustawień użytkownika. I wreszcie, wzory formatu daty są tłumaczone (po angielsku, yyyy
oznacza rok, po niemiecku jjjj
). Gdy arkusz kalkulacyjny programu Excel jest zapisywany, formaty te są przechowywane w formularzu angielskim, aby umożliwić otwarcie arkusza przez instalacje użytkownika i programu Excel w dowolnym języku. W twoim przypadku internacjonalizacja prawdopodobnie wpływa na format daty używany podczas edycji komórki (wstawianie miesiąca przed dniem i używanie 12-godzinnego wyświetlacza z AM/PM wygląda jak Ameryka Północna).
Nie do końca rozumiem, dlaczego program Excel wyświetla "7/22/2011 12:00:00" (zamiast "7/22/2011 0:00:00 AM"). Jestem pewien, że twoja data/czas ma część czasu "0:00". Ale wewnętrzny numer (jak ujawnia Value2
) powie Ci na pewno.
Może występować różnica między wartością komórki a tym, co jest wyświetlane. Jeśli wartość komórki została wprowadzona jako tylko 27.02.2011 (bez komponentu czasu), ale komórka jest sformatowana tak, aby pokazywała czas, to miałoby to sens. W scenariuszu skrzynki wiadomości nie robisz żadnego formatowania, a jedynie patrzysz na "surową" wartość, więc dostajesz właśnie datę ... Jeśli chcesz wyświetlić wyświetloną wartość, użyj ActiveSheet.Cells (x, y) .Text –