У меня есть макрос, который позволяет пользователю выбрать 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Формат