VBA Excel formats de date/modification des valeurs de l'ouverture du fichier par programmation
J'ai quelque chose d'un problème d'ouverture .csv fichier par programmation. Le fichier est une série chronologique de données quotidiennes, avec plusieurs points de données associés à chaque date.
Quand je ouvrir manuellement le fichier, les dates s'ouvrent correctement, comme le format de la date dd/mm/yyyy
. Cependant, quand j'ouvre le fichier par programmation, les dates jusqu'à le 12 de chaque mois sont ouverts comme mm/dd/yyyy
, même si le format reste dd/mm/yyyy
(par exemple, le 1er juillet 1983 (1/7/1983), sera ouvert le 7 janvier 1983 (7/1/1983) - ce n'est pas juste un problème de mise en forme, la Date Julienne (en nombre de jours depuis le 1er janvier 1901) associés à ces dates aussi des changements), et les dates après le 12 de chaque mois ouvert correctement, bien que, comme le texte plutôt qu'une date.
Les données provenant tant que le texte n'est pas un problème, cependant, les dates de changer dès que le fichier est ouvert, est problématique. Je pourrais essayer d'importer l'ensemble .csv fichier texte délimité par des virgules plutôt que de l'ouverture du fichier, cependant, il serait plus facile et plus rapide si je pouvais arrêter les dates de changer quand j'ouvre le fichier.
Quelqu'un a eu un problème similaire dans le passé? Tous les conseils sur ce serait très apprécié.
Cheers, Ben.
Flder = InputBox("Copy and Paste Folder path here:")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set SourcePath = FSO.GetFolder(Flder)
For Each File In SourcePath.Files
Workbooks.Open (File)
FlNm = File.Name
StrtCol = Workbooks(FlNm).Worksheets(1).Range(Cells(4, 1), Cells(4, 30)).Find ("Mean").Column
Workbooks(FlNm).Worksheets(1).Range(Cells(1, 1), Cells(60000, 1)).Copy (Workbooks("Find Water Years V2.xls").Worksheets(1).Range("A3"))
Workbooks(FlNm).Worksheets(1).Range(Cells(1, StrtCol), Cells(60000, StrtCol + 1)).Copy (Workbooks("Find Water Years V2.xls").Worksheets(1).Range("B3"))
Workbooks(FlNm).Close
Next
Le problème semble se produire au niveau de la ligne des Classeurs.Open(Fichier). Désolé de ne pas jeter ce up pour commencer.
Désolé pour le manque de clarté sur l'un Ken, le code ci-dessous.
Être d'accord avec Ken ici. Il y a une cause sous-jacente. Quel est le fichier ressemble dans le bloc-notes à ce point, comment êtes-vous de l'ouverture du fichier? Est-il en train tiré dans un modèle. Collé?
Le fichier s'ouvre directement dans excel à l'aide de
Workbooks.Open(File)
(voir le code ci-dessus que j'ai juste collé). Lorsque les données s'ouvre dans le bloc-notes les dates sont correctes, sous la forme jj/mm/aaaa, le même que lorsque le fichier est ouvert manuellement.donc, rep n'est pas suffisant pour répondre à ma propre encore. La solution a été de définir la variante régionale de
Workbooks.Open
à true, ce qui l'oblige à analyser dans les données en utilisant les paramètres Locaux, plutôt que la valeur par défaut (états-unis). Si l'un de vous voulez répondre à la q n'hésitez pas, sinon, je vais jeter la réponse plus tard cet après-midi ou demain matin.OriginalL'auteur Ben F | 2012-03-08
Vous devez vous connecter pour publier un commentaire.
Depuis que la question a déjà été répondu par les OP dans les commentaires, mais n'est pas affiché comme une réponse officielle, je vais le mettre ici au cas où quelqu'un d'autre manque comme je l'ai fait.
Par paramètre Local = true utilise les machines locales format de date plutôt que de supposer mdy donc dans les paramètres régionaux tels que l'Australie (jma), il va modifier le comportement de Open()
Moi non plus, étant donné que lorsque vous ouvrez un fichier de manière interactive, il se comporte comme si Local:=True je suis d'accord, il doit être la valeur par défaut
OriginalL'auteur David Waterworth
Il est encore rapide si vous l'ouvrez en tant que CDT. Il vous suffit d'utiliser
.OpenText
au lieu de.Open
. Reste du code reste le même 🙂Essayez d'enregistrer une macro, et vous verrez que le code ressemble un peu à ce.
Pas de. Mais vous pouvez appliquer de l'importation de texte, de manipuler le texte à corriger les non ambiguë (de préférence de l'ISO, qui est AAAA-MM-JJ) et l'appliquer CDate sur ces manipulé chaîne.
OriginalL'auteur Siddharth Rout
J'ai trouvé que user2981639 avait la bonne idée, mais j'ai une erreur de syntaxe avec le 'Local: true' si
J'ai utilisé "local:=True" à la place
Ce problème a été me rend fou parce que j'ai aussi eu 2 champs mémo dans le fichier csv.
Si j'ai essayé de formater les dates en quelque sorte, les champs mémo ne serait pas d'importer correctement, ils seraient soit limité à 255 caractères ou incorporées CRLF personnages serait de couper l'enregistrement en morceaux, en fonction de combien il y en avait.
Merci les gars pour l'affichage
OriginalL'auteur Rinion
Ici, vous voyez un code de travail avec exemple. Ce problème frustré moi aussi pendant un moment. J'ai été l'ouverture d'un .fichier txt dans excel et la date, j'ai eu l'utiliser pour a été la conversion de jj-mm-aaaa format mm-jj-aaaa. Ci-dessous vous voyez une solution. Elle se trouvait dans la dernière commande (,Local := True). Voir ci-dessous. Espérons que cela aide.
REMARQUE: reste paramètres ci-dessus pour le tableau et le séparateur décimal sont mon travail spécifiques peuvent ne pas s'appliquer à vous.
OriginalL'auteur Pramod Yadav
Je suis également du mal à trouver une réponse. Cependant, ce qui résout ce problème.:-
Local doit être vrai.
et classeur fermer enregistrer les modifications doivent être fausses. Cela devrait fonctionner.
OriginalL'auteur dinesh