Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Dezimaltrennung bei TXT-Import

Betrifft: Dezimaltrennung bei TXT-Import von: Fedrowitz
Geschrieben am: 20.11.2014 15:23:34

Hallo liebe Herber-Forumgemeinde,

ich fange gerade an, mich intensiver mit der Makro-Programmierung auseinander zu setzen. Die Vorgehensweise ist hier Learning-by-doing und aus den Dingen lernen, die andere so gemacht haben.

Aktuelles Projekt: Einlesen / Importieren von Inhalt einer TXT-Datei

Wichtig hierbei: Der Inhalt sollte in Excel das identische Format wie in der TXT-Datei vorliegen. Es soll nur Spalte A des Excelarbeitsblattes beschrieben werden.

Der aktuelle Code lautet dafür (auch hier aus dem Forum):
________________________________________________________

Sub Erstes_Einlesen()


Dim Datei As String, Text As String
Dim Zeile As Long

On Error GoTo Fehler


'Quelldatei festlegen
Datei = "####Dateiname"

'Tabellenblatt aktivieren, wo die Daten beim ersten Einlesen gespeichert werden sollen.
Sheets("Export").Activate

Open Datei For Input As #1         ' Quelldatei öffnen.
Zeile = 1

Do While Not EOF(1)           ' Schleife bis Dateiende
    Line Input #1, Text      ' Text lesen
    ActiveSheet.Cells(Zeile, 1) = Text
    Zeile = Zeile + 1
Loop

Close #1   'Quelldatei schließen

Exit Sub

Fehler:
Close #1
    MsgBox "FehlerNr.: " & Err.Number & vbNewLine & vbNewLine _
    & "Beschreibung: " & Err.Description _
    , vbCritical, "da ist leider ein Fehler aufgetreten"

End Sub


___________________________________________________________________________

Als Ergebnis erhalte ich (nur ein kleiner Auszug für den Bereich, um den sich dann das Problem dreht):

ABSCHNITT 1
280
30
0
7'068'583'471


Die ersten vier Zeilen sind korrekt. Dazu als Vergleich der Auszug aus der TXT-Datei:

ABSCHNITT 1
280.0000000
30.0000000
0
706.8583471


Die Zeile 5 ist eigentlich eine Zahl mit mehreren Nachkommastellen, nur wird dies nicht erkannt. Das Problem tritt immer auf, wenn nach der Komma nicht Null sondern eine Zahl steht...

Was ist zu tun?

Ich habe auch noch einen zweiten Code gefunden, der die Trennzeichen mit beschreibt, allerdings tritt dann das zusätzliche Problem auf, dass der Inhalt aus der TXT-Datei in mehreren Spalten steht...
_______________________________________________________________________________

Sub Ergebnisse_einlesen() ' liest alle Zeilen aus der Text-Ergebnisdatei und schreibt Inhalt in  _
Spalten

  
    Dim intFF As Integer
    Dim iZeile As Long, iSpalte As Long
    Dim strText As String, arrSplit, iCol As Integer
    Dim strDatei As String
    Dim strSep As String
    
    strDatei = "q:\Test.sr1"
    
    Sheets("Import").Activate
    
    strSep = "."              'Trennzeichen
    'strSep = vbTab              'Trennzeichen
    
    intFF = FreeFile
    iZeile = 1                                 ' Variable für Zeilennummer
 
    Open strDatei For Input As #intFF       ' Öffnet Textdatei zum Lesen
    Do While Not EOF(intFF)                 ' Schleife: Laufe bis zur letzten Zeile
      Line Input #intFF, strDatei             ' Zeile Lesen und zwischenspeichern
      arrSplit = Split(strDatei, strSep)
      For iSpalte = 1 To UBound(arrSplit) + 1
        iCol = iSpalte - 1
        With Cells(iZeile, iSpalte)
          If arrSplit(iCol) <> "" Then
                If InStr(1, arrSplit(iCol), ",") = 0 And IsDate(arrSplit(iCol)) Then
                  .Value = CDate(arrSplit(iCol))
                ElseIf IsNumeric(arrSplit(iCol)) Then
                  .Value = CDbl(arrSplit(iCol))
                Else
                  .Value = arrSplit(iCol)
                End If
          End If
        End With
      Next
      iZeile = iZeile + 1                     ' Zeilennummer erhöhen
    Loop                                    ' zurück zum Schleifenbeginn
    
    Close #intFF                            ' schließt die Textdatei
Fehler:
    With Err
      Select Case .Number
        Case 0
        Case 13 'Typfehler bei Wertumwandlung
          Cells(iZeile, 1).Offset(0, iSpalte) = arrSplit(iSpalte)
          Resume Next
        Case Else
          MsgBox "Fehler-nr.: " & .Number & vbLf & .Description
        Close
      End Select
    End With
End Sub

____________________________________________________________________

Vielleicht könnt ihr mir helfen bei diesem Problemchen?

Grüße

  

Betrifft: AW: Dezimaltrennung bei TXT-Import von: Daniel
Geschrieben am: 20.11.2014 16:56:26

Hi

eine Textdatei kannst du in Exel auch mit der Funktion DATEN - DATENTOOL - EXTERNE DATEN - AUS TEXT einlesen.
Über die einstellungen kann manregeln, dass alles in eine Spalte geschrieben wird.
Hier mal der Code dazu, mit dem Recorder aufgezeichnet und die für diesen einfachen Fall nicht benötigten Einstellungen gelöscht.
Das .Delete am Ende sorgt dafür, dass der Text nur eingelesen wird, ohne das eine Verknüpfung zur Textdatei bestehen bleibt.

Sub Makro1()
With ActiveSheet.QueryTables.Add( _
        Connection:="TEXT;C:\DeinPfad\DeineDatei.txt", _
        Destination:=Range("$A$1"))
    .TextFileStartRow = 1
    .TextFileParseType = xlFixedWidth
    .TextFileColumnDataTypes = Array(1)
    .Refresh BackgroundQuery:=False
End With
End Sub

Gruß Daniel


  

Betrifft: AW: Dezimaltrennung bei TXT-Import von: Fedrowitz
Geschrieben am: 21.11.2014 08:17:28

Hi Daniel,

danke für die Antwort. Es ist etwas merkwürdig...der Import mit dem von mir angegebenen Code funktioniert nun, die Trennung der Zahlen ist nun korrekt. Mit der von dir genannten Methode würde dieses Problem allerdings wieder auftreten...

Ich bleibe nun erstmal bei meinem Code, sollten sich da wieder Probleme einstellen, dann meld ich mich einfach nochmal.

Vielen Dank und ein schönes Wochenende.