Podejrzewam, że problemem jest to, że Excel nie jest w stanie zrozumieć formatu ... Chociaż wybierzesz format daty, pozostaje on tekstem.
Możesz to łatwo przetestować: kiedy próbujesz zaktualizować format dat, wybierz kolumnę i kliknij go prawym przyciskiem myszy i wybierz formatuj komórki (jak już to robisz), ale wybierz opcję 2001-03-14 (u dołu listy). Następnie sprawdź format swoich komórek.
Podejrzewam, że tylko niektóre formaty daty aktualizują się poprawnie, co wskazuje, że Excel nadal traktuje to jak ciąg, a nie datę (zwróć uwagę na różne formaty na poniższym zrzucie ekranu)!
Istnieją obejścia tego problemu, ale żadne z nich nie zostanie zautomatyzowane tylko dlatego, że eksportujesz za każdym razem. Sugerowałbym użycie VBa, gdzie można po prostu uruchomić makro, które konwertuje format daty z USA na Zjednoczone Królestwo, ale oznaczałoby to kopiowanie i wklejanie VBa za każdym razem.
Alternatywnie możesz utworzyć program Excel, który odczytuje nowo utworzone wyeksportowane arkusze Excela (z wymiany), a następnie uruchomić VBa, aby zaktualizować format daty. Zakładam, że wyeksportowany plik programu Excel Excel zawsze będzie miał tę samą nazwę / katalog i podam działający przykład:
Utwórz nowy arkusz Excela o nazwie ImportedData.xlsm (excel włączony). To jest plik, do którego zaimportujemy wyeksportowany plik programu Excel Excel!
Dodaj tę VBa do pliku ImportedData.xlsm
Sub DoTheCopyBit()
Dim dateCol As String
dateCol = "A" 'UPDATE ME TO THE COLUMN OF THE DATE COLUMN
Dim directory As String, fileName As String, sheet As Worksheet, total As Integer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
directory = "C:\Users\Dave\Desktop\" 'UPDATE ME
fileName = Dir(directory & "ExportedExcel.xlsx") 'UPDATE ME (this is the Exchange exported file location)
Do While fileName <> ""
'MAKE SURE THE EXPORTED FILE IS OPEN
Workbooks.Open (directory & fileName)
Workbooks(fileName).Worksheets("Sheet1").Copy _
Workbooks(fileName).Close
fileName = Dir()
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Dim row As Integer
row = 1
Dim i As Integer
Do While (Range(dateCol & row).Value <> "")
Dim splitty() As String
splitty = Split(Range(dateCol & row).Value, "/")
Range(dateCol & row).NumberFormat = "@"
Range(dateCol & row).Value = splitty(2) + "/" + splitty(0) + "/" + splitty(1)
Range(dateCol & row).NumberFormat = "yyyy-mm-dd"
row = row + 1
Loop
End Sub
Zrobiłem też aktualizację formatu daty do rrrr-mm-dd, ponieważ w ten sposób, nawet jeśli Excel podaje filtr sortowania AZ zamiast najnowszych wartości, nadal działa!
Jestem pewien, że powyższy kod zawiera błędy, ale oczywiście nie mam pojęcia, jakiego rodzaju dane posiadasz, ale przetestowałem je z jedną kolumną dat (jak masz) i działa dobrze dla mnie!
Jak dodać VBA w MS Office?