Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Zamiana formatu w VBA
anonim




Typ: Nie zarejestrowany
Zamiana formatu w VBA

Nie mogę rozwiązać skutecznie problemu ze zmianą formatu daty w VBA, która domyślnie ustawiana jest w formacie amerykańskim tzn. najpierw miesiąc potem dzień i rok.
Dane źródłowe importowane z zewnętrznej bazy danych mają format "dd-mm-yyyy" a chcę by był "yyyy-mm-dd" ,aby można było na podstawie tak uporządkowanych danych stworzyć wykres.
Po wciśnięciu kombinacji klawiszy Ctrl+Shift+# dla komórki z datą otrzymuję
Selection.NumberFormat = "d-mmm-yy"
czyli informację o domyślnym formacie w VBA.
Zastosowałem linijkę kodu(wynik w kolumnie 4 dla danych w 3 kolumnie).

Cells(counter, 4).Value = "=TEXT(YEAR(RC[-1])&-MONTH(RC[-1])&-DAY(RC[-1]),""yyyy-mm-dd"""

Program działa w pętli i przebiega około 40000 rekordów, problem w tym,że dla wszystkich rekordów chodzi on pół godziny.
Próbowałem też zautomatyzować  operację  Excela

Cells(2, 1).Copy 'tutaj jest uprzednio wpisana 1
ActiveSheet.UsedRange.Columns("C".Select
Selection.PasteSpecial Paste:=xlAll,
Operation:=xlMultiply 'zamiana formatu tekstowego na liczby
Selection.NumberFormat = "yyyy-mm-dd" 'porządany format daty.

Tu jednak pojawia się problem z amerykańskim zapisem daty, data jest żle interpretowana tzn. dzień jest interpretowany jako miesiąc i na odwrót; w innych wypadkach kiedy dzień interpretowany jako miesiąc jest większy od 12 cała data pozostaje niezmieniona w formacie tekstowym.
Gdy wykonuję te same operacje w samym Excelu  wszystko jest w porządku i z formatem i z szybkością działania. Zmiana formatu daty jest jednak częścią większego programu i nie mogę poprzestać na ręcznym wykonywaniu niektórych operacji.
Piszę do forum ponieważ nie znalazłem na polsko i angielsko języcznych stronach satysfakcjonyjącego rozwiązania tego problemu.
Z góry dziękuję za pomoc.

Darek


30-04-2003 15:04
  
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003
rozwiązanie

Użyj polecenia Format(), np:

Format(data, format)
, gdzie
data - twoja data do konwersji
format - "yyyy-MM-dd"


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

10-05-2003 09:44
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
anonim




Typ: Nie zarejestrowany

może lepiej zapisać datę w formacie stringa
czyli texu a dopiero potem konwertować na daty
a wkomórce zapisać 'jakaś data
a póżniej cdDate()
mniej operacji i mniej czasu na wykonanie
ale nie wiem czy to nie jest czysta herezja

14-05-2003 09:24
  
anonim




Typ: Nie zarejestrowany
poprawka

sorry nie cdData() tylko Cdata()

14-05-2003 09:27
  
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003


Nie mogę rozwiązać skutecznie problemu ze zmianą formatu daty w VBA, która domyślnie ustawiana jest w formacie amerykańskim tzn. najpierw miesiąc potem dzień i rok.
Dane źródłowe importowane z zewnętrznej bazy danych mają format "dd-mm-yyyy" a chcę by był "yyyy-mm-dd" ,aby można było na podstawie tak uporządkowanych danych stworzyć wykres.
Po wciśnięciu kombinacji klawiszy Ctrl+Shift+# dla komórki z datą otrzymuję
Selection.NumberFormat = "d-mmm-yy"
czyli informację o domyślnym formacie w VBA.
Zastosowałem linijkę kodu(wynik w kolumnie 4 dla danych w 3 kolumnie).

Cells(counter, 4).Value = "=TEXT(YEAR(RC[-1])&-MONTH(RC[-1])&-DAY(RC[-1]),""yyyy-mm-dd"""

Program działa w pętli i przebiega około 40000 rekordów, problem w tym,że dla wszystkich rekordów chodzi on pół godziny.
Próbowałem też zautomatyzować  operację  Excela

Cells(2, 1).Copy 'tutaj jest uprzednio wpisana 1
ActiveSheet.UsedRange.Columns("C".Select
Selection.PasteSpecial Paste:=xlAll,
Operation:=xlMultiply 'zamiana formatu tekstowego na liczby
Selection.NumberFormat = "yyyy-mm-dd" 'porządany format daty.

Tu jednak pojawia się problem z amerykańskim zapisem daty, data jest żle interpretowana tzn. dzień jest interpretowany jako miesiąc i na odwrót; w innych wypadkach kiedy dzień interpretowany jako miesiąc jest większy od 12 cała data pozostaje niezmieniona w formacie tekstowym.
Gdy wykonuję te same operacje w samym Excelu  wszystko jest w porządku i z formatem i z szybkością działania. Zmiana formatu daty jest jednak częścią większego programu i nie mogę poprzestać na ręcznym wykonywaniu niektórych operacji.
Piszę do forum ponieważ nie znalazłem na polsko i angielsko języcznych stronach satysfakcjonyjącego rozwiązania tego problemu.
Z góry dziękuję za pomoc.

Darek



Problem z datą jest ogólnie znany. Wszystko rozbija się o to, jak została ona zdefiniowana w Windowsie. Microsoft do tej pory skutecznie nie rozwiązał tego problemu, chociaż funkcja formatująca, którą podawałem wcześniej czasami pomaga. Czasami jednak nie. Microsoft więc wymyślił funkcję DateValue(data), która miała ten problem rozwiązać i... I, niestety, nie zawsze to pomaga, choć jest chyba najbardziej skutecznym narzędziem.
Microsoft zarzeka się, że funkcja DateValue(data) ma być jak najbardziej kompatybilna ze wszystkimi ustawieniami regionalnymi... Zresztą, sam zobacz, czy mają rację


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

20-06-2003 14:19
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
Wrobel



Typ: neutral
Postów: 44
Zarejestrowany: Sep 2002

Miałem podobny problem w Accessie, ale udało mi się go rozwiązać i programy chodzą bez zastrzeżeń na komputerach bez względu na ustawienia regionalne. Rzeczywiście szkopuł tkwi w niedbałości firmy Microsoft. Funkcja Format() pomaga, ale otrzymywany wynik będzie wartością stringową. Wszystko jest w porządku gdy chodzi o pokazywanie danych, chociaż i tutaj mogą być problemy. Ja poradziłem sobie w następujący sposób:
- rozpoznaję ustawienia regionalne komputera
- odpowiednio przekształcam dane pokazywane (formatuję je do potrzebnej postaci)
- zapisywane dane muszą być tak przekształcone, aby zgadzały się z ustawieniami regionalnymi, bo w przeciwnym wypadku w polu pojawią się fałszywe dane np. jeżeli ustawienia komputera mają postać "dd-mm-yyyy" to data zapisywana musi mieć taki sam format daty.
Cały ten proglem rozwiązałem za pomocą dwóch funkcji, które niestety musisz napisać sobie sam - jedna do odczytu danych, a druga do ich zapisywania.
Jeżeli w bazie danych masz już jakieś rekordy, to musisz sprawdzić, czy nie ma tam przekłamań - jeżeli są to musisz to poprawić ręcznie. Wydaje mi się, że napisanie programu nie zajmie dużo czasu, a opłac się to - ja pracowałem na bazach o 90.000 rekordach i tam to się pojawiło.

23-06-2003 19:00
Pokaż profil Wrobel  Wyślij email do Wrobel   Odwiedź stronę Wrobel  
Wszystkich odpowiedzi: 5 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1