Как заставить Excel обрабатывать даты в CSV как текст в макросе

Как заставить Excel обрабатывать даты в CSV как текст в макросе

У меня есть макрос, который позволяет пользователю выбрать CSV-файл и затем манипулировать им. Однако он обрабатывает ячейки, содержащие что-то вроде 1/2/12, как дату. Мне нужно сохранить эти строки как текст, а не даты.

Я знаю, что могу сделать это 1) начав новый рабочий лист 2) импортировав CSV вместо его открытия. Установите столбец с датами на "текст" и закончите.

Вопрос: как прервать Данные > Импорт, чтобы пользователь мог выбрать файл. После этого макрос должен продолжить задавать формат столбцов, завершить импорт и выполнить манипуляции с данными.

Редактировать: Вот соответствующий код макроса в его нынешнем виде:

ChDir "C:\RoomTimerData\"

MyFile = Application.GetOpenFilename("Значения, разделенные запятыми (.csv),.csv")

Workbooks.Open fileName:=MyFile

решение1

Обычно тип данных для каждого импортируемого столбца выбирается на шаге 3 из 3 диалога импорта текста. Чтобы избежать неправильного форматирования, просто используйтетексткак формат, и все хорошо.

Однако, вы, кажется, используете макрос VBA для импорта ваших CSV-файлов. Поэтому я только что записал такой неискаженныйтекстИмпортировать:

With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;C:\test.csv", Destination:=Range("$A$1"))
    .Name = "test_1"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 850
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = True
    .TextFileCommaDelimiter = False
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(2, 1) 'THIS IS THE MAGIC LINE!
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
End With

Также посмотрите на этот пример из excel-help TextFileColumnDataTypes:

Set shFirstQtr = Workbooks(1).Worksheets(1) 
Set qtQtrResults = shFirstQtr.QueryTables _
        .Add(Connection := "TEXT;C:\My Documents\19980331.txt", _
        Destination := shFirstQtr.Cells(1, 1))
With qtQtrResults
    .TextFileParseType = xlFixedWidth
    .TextFileFixedColumnWidths = Array(5, 4)
    .TextFileColumnDataTypes = _
        Array(xlTextFormat, xlSkipColumn, xlGeneralFormat)
    .Refresh
End With

Вот форматы, которые вы можете использовать:

  • xlОбщийФормат
  • xlТекстФормат
  • xlПропуститьСтолбец
  • xlDMYFormat
  • xlDYMFormat
  • xlEMDFormat
  • xlMDYФормат
  • xlMYDFormat
  • xlYDMФормат
  • xlYMDФормат

Связанный контент