So zwingen Sie Excel in einem Makro, Daten in CSV als Text zu behandeln

So zwingen Sie Excel in einem Makro, Daten in CSV als Text zu behandeln

Ich habe ein Makro, mit dem der Benutzer eine CSV-Datei auswählen und dann bearbeiten kann. Zellen, die Angaben wie 1/2/12 enthalten, werden jedoch als Datum behandelt. Ich muss diese Zeichenfolgen als Text und nicht als Datum beibehalten.

Ich weiß, dass ich das tun kann, indem ich 1) ein neues Arbeitsblatt beginne, 2) die CSV-Datei importiere, anstatt sie zu öffnen. Die Spalte mit den Daten auf „Text“ setze und fertig.

Die Frage ist: Wie kann ich Daten > Importieren unterbrechen, damit der Benutzer die Datei auswählen kann. Danach sollte das Makro weiter das Format der Spalten festlegen, den Import abschließen und die Datenmanipulationen durchführen.

Bearbeiten: Hier ist der relevante Code des Makros in seiner jetzigen Form:

ChDir "C:\RoomTimerData\"

MeineDatei = Application.GetOpenFilename("Kommagetrennte Werte (.csv),.csv")

Arbeitsmappen.Öffnen Sie Dateiname:=MeineDatei

Antwort1

Normalerweise wählt man den Datentyp für jede importierte Spalte als Schritt 3 von 3 des Textimportdialogs aus. Um Fehlformatierungen zu vermeiden, verwenden Sie einfachTextals Format, und alles ist gut.

Sie scheinen jedoch ein VBA-Makro zum Importieren Ihrer CSV-Dateien zu verwenden. Ich habe also gerade eine solche unverfälschteTextimportieren:

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

Sehen Sie sich auch dieses Beispiel aus der Excel-Hilfe an 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

Dies sind die Formate, die Sie verwenden können:

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

verwandte Informationen