Hallo,
ich habe mir ein Auswertemakro geschrieben, mit dem ich gern eine beliebige Textdatei meiner Messreihe einlese und anschließend eine Auswertung laufen lassen.
Problematisch stellt sich dabei allerdings noch das Einlesen der txt.Datei dar. Diese besteht aus ein paar Textzeilen zu Beginn und anschließend aus vier Spalten. Über den Standard-Import im Excel (ohne VBA) ist das kein Problem, es werden automatisch die Spalten zugeordnet. Nun soll das ganze natürlich auch im VBA funktionieren. Dazu der erste Gedanke:
Dim Quelle As Object, Ziel As Object
Dim Datei As String
With Application
.ThousandsSeparator = "."
.DecimalSeparator = ","
.UseSystemSeparators = False
End With
On Error GoTo Fehler
'Dialog "Datei öffnen" anzeigen
Datei = Application.GetOpenFilename("Text-Dateien(*.txt),*txt")
'Abbrechen falls keine Datei ausgewählt
If Datei = "Falsch" Then
MsgBox "keine Datei ausgewählt", , "Abbruch"
Exit Sub
End If
'MsgBox "Ausgewählte Datei: " & Datei, , ""
'Ausgewählte Datei öffnen
Workbooks.Open Filename:=Datei
Set Quelle = ActiveWorkbook.Worksheets(1)
Set Ziel = ThisWorkbook.Worksheets(1)
'kopieren und einfügen
Quelle.UsedRange.Copy Ziel.Cells(1, 1)
ActiveWorkbook.Close
'Speicher freigeben
Set Quelle = Nothing
Set Ziel = Nothing
'
Fehler:
Set Quelle = Nothing
Set Ziel = Nothing
'
MsgBox "FehlerNr.: " & Err.Number & vbNewLine & vbNewLine _
& "Beschreibung: " & Err.Description _
, vbCritical, "Fehler"
'End Sub
Den Quellcode habe ich aus dem Netz. Funktioniert auch wirklich super, allerdings kann Excel irgendwann Punkte und Kommata als Tausendertrennzeichen nicht unterscheiden. Das bedeutet, dass Werte die kleiner als -1 bzw. größer als +1 falsch interpretiert werden, wie folgendes Bsp zeigt:
Wert original: 1,4256
Wert importiert: 1425,6
Das Problem konnte ich nicht lösen, und habe deswegen folgendes probiert:
Dim varDatei As Variant
Dim Dateiname, Datei As Variant
varDatei = Application.GetOpenFilename()
If varDatei = False Then
MsgBox "Der Benutzer hat abgebrochen.", vbInformation
Else
Datei = vbCrLf + varDatei
End If
Dateiname = InputBox("Bitte den Dateinamen eingeben.")
Cells(1, 1) = Datei
Cells(2, 1) = Dateiname
Cells(3, 1) = varDatei
'Cells(4, 1) = fDatei.Name
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" + Datei _
, Destination:=Range("$A$1"))
.Name = "2017_06_20_08_03_47.txt"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Damit wollte ich quasi über das Auswahlfenster einer Variable den Pfad zuweisen und anschließend auf diese Variable in dem Import zugreifen. Leider wenig erfolgreich. Folgender Fehler tritt auf:
"Laufzeitfehler '1004':
Auf die Datei konnte nicht zugegriffen werden. Versuchen Sie die folgenden Lösungsvorschläge:" (danach kommt, ob der Ordner vorhanden oder schreibgeschützt ist, bzw. ob unzulässige Sonderzeichen verwendet wurden.
Wie bekomme ich meine ASCII-Daten über ein Dateiauswahlfenster in korrekter Weise in meine Makro-Arbeitsmappe?
Besten Dank bereits im Voraus für die Hilfe.
Gruß Konstantin
|