Como forçar o Excel a tratar datas em CSV como texto em uma macro

Como forçar o Excel a tratar datas em CSV como texto em uma macro

Eu tenho uma macro que permite ao usuário selecionar um arquivo CSV e depois manipulá-lo. No entanto, ele trata células que contêm coisas como 1/2/12 como uma data. Preciso manter essas strings como texto, não como datas.

Eu sei que posso fazer isso 1) iniciar uma nova planilha 2) importar o CSV em vez de abri-lo. Defina a coluna com as datas como "texto" e finalize.

A questão é: como posso interromper Dados > Importar para que o usuário possa selecionar o arquivo. Depois disso, a macro deverá continuar definindo o formato das colunas, finalizar a importação e realizar as manipulações dos dados.

Editar: aqui está o código relevante da macro tal como está:

ChDir "C:\RoomTimerData\"

MeuArquivo = Application.GetOpenFilename("Valores separados por vírgula (.csv),.csv")

Pastas de trabalho.Open fileName:=MeuArquivo

Responder1

Normalmente seria selecionado o tipo de dados para cada coluna importada como etapa 3 de 3 da caixa de diálogo de importação de texto. Para evitar formatação incorreta, basta usartextocomo formato, e você está bem.

No entanto, você parece usar uma macro VBA para importar seus arquivos CSV. Então acabei de gravar um arquivo tão incorruptotextoimportar:

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

Além disso, veja este exemplo do Excel-help para 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

Estes são os formatos que você pode usar:

  • xlGeneralFormat
  • xlTextFormat
  • xlSkipColumn
  • xlDMYFormat
  • xlDYMFormat
  • xlEMDFormat
  • xlMDYFormat
  • xlMYDFormat
  • xlYDMFormat
  • xlYMDFormat

informação relacionada