Le problème
J'ai un programme VBA qui exporte des données d'un file Excel vers un CSV. Lorsqu'il s'agit d'une date, il le forme comme #2016-06-14#
. Je suppose que les marques de hachage (ou le signe d'octothorpe ou de livre ou le hashtag) sont destinés à indiquer que le champ est un champ de date. Mais, lorsque je importerai le CSV dans un autre classur, la date ne sera pas disponible, quelle que soit la façon dont je formate le champ. Il contient toujours les #
caractères.
La question
Comment puis-je get la colonne de date à importer en tant que date de format YMD?
annexe
Voici un code que j'utilise pour exporter et importer, à titre de reference.
Exportation
Sub WriteCSV(writeRange As Range, fileName As Ssortingng) Dim myFile As Ssortingng, rng As Range, cellValue As Variant, i As Integer, j As Integer myFile = ActiveWorkbook.Path & "\Results\" & fileName & ".csv" Debug.Print myFile Open myFile For Output As #1 For i = 1 To writeRange.Rows.Count For j = 1 To writeRange.Columns.Count cellValue = writeRange.Cells(i, j).value If j = writeRange.Columns.Count Then Write #1, cellValue Else Write #1, cellValue, End If Next Next Close #1 End Sub
Importer
Sub ReadCSV(targetCell As Range, filePath As Ssortingng) With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;" & filePath, Destination:=targetCell) .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 437 .TextFileStartRow = 2 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = False .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False .Delete End With End Sub
Essayez de produire .text au lieu de .value.
Change ça:
cellValue = writeRange.Cells(i, j).value
pour ça:
cellValue = writeRange.Cells(i, j).Text
Jeter ces #
.
Lorsque je Save as
manuellement en Save as
que file CSV, Excel ne place PAS ces #
autour des dates. Au lieu de cela, il écrit les dates telles qu'elles sont définies dans mes parameters régionaux (c'est-à-dire – pour moi – dd/mm/yyyy
).
Et lors de l'import arrière, l'enregistreur a utilisé le tableau (… 4 …) pour la colonne de date, et il a été importé correctement.
Quoi qu'il en soit, CSV est vraiment un piège si vous travaillez dans un environnement international puisqu'il se comporte différemment selon les parameters locaux de la machine. Étant mal défini, c'est le dernier format que j'utiliserais.