Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1504to1508
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Mehrere .asc Dateien einlesen und bearbeiten

Mehrere .asc Dateien einlesen und bearbeiten
28.07.2016 15:27:13
Tobias
Hallo zusammen,
vorerst einmal ein dickes Dankeschön für die Existenz des Forums und die netten Helfer. Ich habe mit Hilfe des Forums schon einiges an Makros hinbekommen.
Nun stehe ich jedoch vor einem für mich unlösbaren und nervenraubenden Problem für das ich einfach keine Lösung finde und sich wie folgt gestaltet:
Ich habe ein Makro geschrieben, mit Hilfe dessen ich eine .asc Datei einlese, die Datei in ein anderes Woorkbook verschoben wird und gewisse Operationen vollzogen werden, die jedoch nicht von Relevanz sind. Das Makro funktioniert auch einwandfrei für eine Datei und sieht wie folgt aus:
Sub DateiLesen()
Dim varDatei As Variant
Dim MyPath As String
Dim ws As Worksheet
Dim oWs As Worksheet
Dim LastRow As Long
Dim LastColumn As Long
Dim StartCell As Range
Dim wss As Worksheet
Dim anzahlZeilen As Integer
Dim z As Integer
Dim HRFZeile As Integer
Dim x As Integer
Dim anzahlZeilenFormula As Integer
Dim StartCell2 As Range
Dim b As Long
Set StartCell = Range("A32")
Set ws = ActiveSheet
Set StartCell2 = Range("B1")
'Datei auswählen und importieren
Workbooks.OpenText Filename:= _
Application.GetOpenFilename() _
, Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
ActiveWindow.WindowState = xlNormal
'Import der Datei in die Zielmappe inkl. Bennenung und Anpassung der Spaltenbreite
ActiveSheet.Select
ActiveSheet.Move After:=Workbooks( _
"Datei_oeffnen.xlsm").Sheets(3)
Range("B1") = "Blattbezeichnung:"
Range("C1").Activate
ActiveCell = ActiveSheet.Name
Columns("A:Z").EntireColumn.AutoFit
End Sub
Nun möchte ich jedoch mehrere asc.Dateien am Anfang auswählen und das Makro soll nacheinander alle ausgewählten Dateien durchlaufen. Selbst nach zwei Tagen Recherche mittels Google komme ich zu keinem Ergebnis. Mein Ansatz sieht wie folgt aus:
Sub DateiLesen()
Dim varDatei As Variant
Dim intDatei As Integer
Dim MyPath As String
Dim ws As Worksheet
Dim oWs As Worksheet
Dim LastRow As Long
Dim LastColumn As Long
Dim StartCell As Range
Dim wss As Worksheet
Dim anzahlZeilen As Integer
Dim z As Integer
Dim HRFZeile As Integer
Dim x As Integer
Dim anzahlZeilenFormula As Integer
Dim StartCell2 As Range
Dim b As Long
Set StartCell = Range("A32")
Set ws = ActiveSheet
Set StartCell2 = Range("B1")
varDatei = Application.GetOpenFilename(MultiSelect:=True)
If TypeName(varDatei) Like "Boolean" Then
GoTo BeforeExit
End If
'Dateien auswählen und importieren
For varDatei = 1 To UBound(varDatei)
Workbooks.OpenText Filename:=varDatei, Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited,  _
TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
ActiveWindow.WindowState = xlNormal
'Import der Datei in die Zielmappe inkl. Bennenung und Anpassung der Spaltenbreite
ActiveSheet.Select
ActiveSheet.Move After:=Workbooks( _
"Datei_oeffnen.xlsm").Sheets(3)
Range("B1") = "Blattbezeichnung:"
Range("C1").Activate
ActiveCell = ActiveSheet.Name
Columns("A:Z").EntireColumn.AutoFit
Next varDatei
End Sub
Über Hilfe wäre ich unfassbar dankbar!
Grüße, Tobias

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrere .asc Dateien einlesen und bearbeiten
28.07.2016 15:42:01
Fennek
Hallo Tobias,
nach meinem Verstädnis geht es nicht 2x dieselbe Variable zu nutzen:
anstelle
For varDatei = 1 To UBound(varDatei)
sollte
For Schleifenindex = 1 To UBound(varDatei) 'irgentein sonst nicht genutzter Buchstabe, z.B. i
mfg
Diese 'For…Next'-Konstruktion war tatsächlich …
28.07.2016 16:48:32
Luc:-?
keine gute Idee, Tobias,
allerdings nicht aus dem von Fennek genannten Grund, sondern weil damit varDatei mit dem LaufZähler überschrieben wird. Hier sollte man For Each benutzen:
varDateien = Application.GetOpenFilename(MultiSelect:=True)
For Each varDatei In varDateien

Hier ist dann die LaufVariable varDatei ein einzelner DateiName aus dem DateiNamensFeld varDateien.
Falls du meiner anfänglichen Behauptung nicht glaubst, Fennek,
teste mal das … ;-]
Sub Test()
Const txVar$ = "x y z"
Dim xVar
xVar = Split(txVar)
For xVar = 0 To UBound(xVar)
Debug.Print Split(txVar)(xVar)
Next xVar
End Sub
Feedback nicht unerwünscht! Gruß, Luc :-?
Besser informiert mit …
Anzeige
AW: Diese 'For…Next'-Konstruktion war tatsächlich
29.07.2016 09:31:22
Tobias
Hallo ihr zwei,
vielen vielen Dank für die schnellen Vorschläge. Damit hätte ich nicht gerechnet:)
Die Erklärung von dir, Luc, war sinnvoll weshalb ich dein Vorschlag umgesetzt habe und tatsächlich funktioniert es. Super! tausend Dank!
Ich hätte jedoch noch eine Verständnisfrage: Woher weiß das Makro das varDatei eine Datei von varDateien ist? Erkennt er das alleine an der Endung von Datei(en) und Datei()?
Hier nochmal mein Code für alle, die eventuell das gleiche Problem haben und um das ganze abzuschließen.
Sub DateiLesen()
Dim varDatei As Variant
Dim varDateien As Variant
Dim intDatei As Integer
Dim MyPath As String
Dim ws As Worksheet
Dim oWs As Worksheet
Dim LastRow As Long
Dim LastColumn As Long
Dim StartCell As Range
Dim wss As Worksheet
Dim anzahlZeilen As Integer
Dim z As Integer
Dim HRFZeile As Integer
Dim x As Integer
Dim anzahlZeilenFormula As Integer
Dim StartCell2 As Range
Dim b As Long
Dim i As Integer
Set StartCell = Range("A32")
Set ws = ActiveSheet
Set StartCell2 = Range("B1")
'Datei(en) auswählen
varDateien = Application.GetOpenFilename(MultiSelect:=True)
If TypeName(varDateien) Like "Boolean" Then
GoTo BeforeExit
End If
'Datei(en) importieren
For Each varDatei In varDateien
Workbooks.OpenText Filename:=varDatei, Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited,  _
TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
ActiveWindow.WindowState = xlNormal
'Import der Datei in die Zielmappe inkl. Benennung und Anpassung der Spaltenbreite
ActiveSheet.Select
ActiveSheet.Move After:=Workbooks( _
"Dateien_oeffnen.xlsm").Sheets(3)
Range("B1") = "Blattbezeichnung:"
Range("C1").Activate
ActiveCell = ActiveSheet.Name
Columns("A:Z").EntireColumn.AutoFit
Range("B2") = "Filtergehäuse"
Range("C2").FormulaLocal = "=Links(C1;20)"
Range("B3") = "Prüfbezeichnung"
Range("C3").FormulaLocal = "=TEIL(C1;22;30)"
. 'Hier folgen verschiedene Operationen
Next varDatei
BeforeExit:
MsgBox " Keine Datei ausgewählt!", vbInformation
Exit Sub
'Meldung über Abschluss des Datenimports
MsgBox "Import der Daten beendet!"
End Sub
Danke euch zwei!
Anzeige
Nee, 'varDatei' ist als 'Variant' deklariert und …
29.07.2016 16:51:18
Luc:-?
…somit als LaufVariable für For Each-Schleifen zulässig, Tobias,
bei denen die LaufVariable stets ein Objekt (oder ein Variant, der ja ggf auch ein Objekt referenzieren kann) sein muss. For Each heißt bekanntlich Für jedes und somit bezieht sich varDatei nacheinander auf jedes Element in deiner NamensListe, die von varDateien repräsentiert wird. Die Bezeichnungen haben damit nichts zu tun und könnten sonstwie lauten (ich wollte nur deinen Änderungs­Aufwand klein halten!), nur die Deklaration und die DatenZuweisung, sowie die Syntax von For Each x In y.
Übrigens, varDatei ist keine Datei, sondern ein DateiName, das ist ein Unterschied (Datei wäre ein Objekt, ihr Name nur ein Text), und varDateien ist quasi eine (Datei-)NamensListe!
Gruß, Luc :-?
Anzeige

245 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige