Формат даты / значения Excel VBA изменяется при программном открытии файла - PullRequest
6 голосов
/ 09 марта 2012

У меня возникла проблема с программным открытием файла .csv. Файл представляет собой временной ряд ежедневных данных, с несколькими точками данных, связанными с каждой датой.

Когда я вручную открываю файл, даты открываются правильно, как формат даты dd/mm/yyyy. Однако, когда я открываю файл программно, даты до 12-го числа каждого месяца открываются как mm/dd/yyyy, хотя формат остается dd/mm/yyyy (например, 1 июля 1983 г. (1/7/1983), будет открыто по состоянию на 7 января 1983 г. (01.07.1983) - это проблема не только форматирования, но и юлианская дата (дни с 1 января 1901 г.), связанные с этими датами), а также даты после 12 числа каждого месяца открываются правильно, хотя как текст, а не как дата.

Данные, поступающие в виде текста, не являются проблемой, однако изменение дат при открытии файла проблематично. Я мог бы попытаться импортировать весь файл .csv как текст с разделителями-запятыми, а не открывать файл, однако было бы проще и быстрее, если бы я мог остановить изменение дат при открытии файла.

Кто-нибудь сталкивался с подобной проблемой в прошлом? Любой совет по этому вопросу будет принята с благодарностью.
Ура, Бен.

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

Проблема возникает в строке Workbooks.Open (File). Извините, что не бросил это для начала.

Ответы [ 5 ]

9 голосов
/ 18 августа 2014

Поскольку ФП уже ответил на этот вопрос в комментариях, но не опубликовал его как официальный ответ, я поставлю его здесь на случай, если кто-то пропустит его, как я.

workbook = workbooks.Open(filename, Local:= true)

УстановкойLocal = true использует формат даты локальных компьютеров, а не предполагает mdy, поэтому в таких регионах, как Австралия (dmy), он изменит поведение Open ()

0 голосов
/ 24 января 2019

Я тоже изо всех сил пытаюсь найти ответ.Однако то, что решает эту проблему:.

1002 * Локально должно быть истиной.и книга закрыть, сохранить изменения должны быть ложными.Это должно сработать.
0 голосов
/ 08 декабря 2015

Здесь вы видите рабочий код с примером.Эта проблема меня тоже немного расстроила.Я открывал файл .txt в Excel, и датой, которую я использовал, было преобразование из формата дд-мм-гггг в формат мм-дд-гггг.Ниже вы видите решение.Он лежал в последней команде (, Local: = True).Увидеть ниже.Надеюсь, это поможет.

Note that while trasferring .txt file to excel use File Origin as "xlWindows:
    Workbooks.OpenText Filename:= _
    ThisWorkbook.Worksheets("Reporting").Cells(3, 6), Origin:=xlWindows, _
    StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(49 _
    , 1), Array(50, 1), Array(67, 1), Array(80, 1), Array(93, 1), Array(106, 1), Array(119, 1)) _
    , DecimalSeparator:=",", ThousandsSeparator:=".", TrailingMinusNumbers:= _
    True, Local:=True

ПРИМЕЧАНИЕ. Остальные значения выше, чем настройки для массива и десятичного разделителя, относятся к моей работе и могут не относиться к вам.

0 голосов
/ 04 декабря 2014

Я обнаружил, что у user2981639 была правильная идея, но я получил синтаксическую ошибку с 'Local: true', поэтому я использовал вместо 'local: = True'

Эта проблема сводила меня с ума, потому что я также2 памятных поля в CSV-файле.Если я попытаюсь отформатировать даты любым способом, поля мемо не будут импортированы правильно, они будут либо усечены до 255 символов, либо любые встроенные символы CRLF разделят запись на части в зависимости от того, сколько их было.

Спасибо, ребята, за публикацию

0 голосов
/ 09 марта 2012

Я мог бы попытаться импортировать весь файл .csv в виде текста с разделителями-запятыми, а не открывать его, однако было бы проще и быстрее, если бы я мог остановить изменение дат, когдаЯ открываю файл.

Это все еще быстро, если вы откроете его как CDT.Вы просто используете .OpenText вместо .Open.Остальной код остается прежним:)

Попробуйте записать макрос, и вы увидите, что код выглядит примерно так:

Workbooks.OpenText Filename:= File, _
Origin:=437, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...