Live-Forum - Die aktuellen Beiträge
Datum
Titel
18.04.2024 18:04:29
18.04.2024 16:33:24
Anzeige
Archiv - Navigation
808to812
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
808to812
808to812
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Frage zu einem Textimportmakro von Ramses?!?

Frage zu einem Textimportmakro von Ramses?!?
16.10.2006 14:46:18
Ramses?!?
Hallo Leute,
ich habe im Archiv ein Makro von @Ramses gefunden, welches Textdateien, die mehr als 65536 Zeilen enthält, einließt und auf mehrere Tabellenblätter aufteilt. Nachfolgend erst mal das Makro.
Option Explicit

Sub Read_Bigdicttxt_File()
'Liest Text Datein mit mehr als 65536 Datensätzen ein
'und erstellt automatisch eine neu Arbetismappe und Worksheets
'Der eingelesene Text wird in Spalte 1 geschrieben
'der Reverse Text in spalte 2
'Hilfsvariable für Anzahl Datensätze
Dim Text1 As String
'Variablen für den Array nötig
Dim txtlines As Long, i As Long, n As Long
'Neue Mappe und Variables Tabellenblatt deklarieren
Dim tWkb As Workbook, tWks As String
'Für Office97 muss das Array TextArr als String definiert werden
'Entdeckt duch Gerd Z aus dem Herber Forum
Dim textArr As Variant
Dim ReadFile As String
Dim OldStatusbar
'Dialog öffnen auf Basis von *.dat Files
ReadFile = Application.GetOpenFilename("DAT Files (*.txt;*.dat),")
'Schliessen einer geöffneten Datei
Close #1
'1. Öffnen der Datei
'Den Namen und Pfad bitte anpassen
Open ReadFile For Input As #1
'Die anzahl ist nötig um die Grösse des Arrays zu deklarieren
'Zähler auf 0 setzen
txtlines = 0
Do While Not EOF(1)    ' Schleife bis Dateiende.
Line Input #1, Text1    ' Hilfsvariable zum einlesen verwenden
'Zähler hochzählen
txtlines = txtlines + 1
Loop
'Schliessen der Datei weil Dateiende erreicht wurde
Close #1
'Erneutes Öffnen um zum Dateianfang zu kommen
Open ReadFile For Input As #1    ' Datei zum Einlesen öffnen.
'Array neu auf die Anzahl der Linien initialisieren
ReDim textArr(txtlines)
'Einlesen der Dateien in das Array
For i = 0 To txtlines - 1
Line Input #1, textArr(i)
Next i
Close #1
'Arbeitsmappe erstellen und zuweisen
Workbooks.Add
Set tWkb = ActiveWorkbook
'Alles löschen bis auf eine Tabelle
'>> Kosmetik :-)
For i = Worksheets.Count To 2 Step -1
Application.DisplayAlerts = False
Worksheets(i).Delete
Application.DisplayAlerts = True
Next
OldStatusbar = Application.DisplayStatusBar
'Namen vergeben
Worksheets(1).Name = "Dataset from 1"
tWks = tWkb.Worksheets(1).Name
'Daten in aktuelles Sheet schreiben
n = 1
For i = 1 To txtlines
Application.StatusBar = "Datensatz " & i & " von " & txtlines & " wird eingelesen"
'Neue Tabelle anlegen wenn Zelle 65536 erreicht wurde
If i Mod 65536 = 0 Then
'Aufsplitten der bisher eingelesenen Daten
'Indem die Trennung anhand von der Semikolons vorgenommen wird
Application.StatusBar = "Datentrennung wird vorgenommen"
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), Semicolon:=True
Range("A1").Select
dataFitting = False
tWkb.Worksheets.Add After:=ActiveSheet
ActiveSheet.Name = "Dataset from " & i
tWks = ActiveSheet.Name
n = 1
End If
'Richtes Wort
tWkb.Worksheets(tWks).Cells(n, 1) = textArr(i)
n = n + 1
Next i
Application.StatusBar = "Datentrennung wird vorgenommen"
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), Semicolon:=True
Range("A1").Select
MsgBox "BigDict.txt vollständig eingelesen"
Application.DisplayStatusBar = OldStatusbar
End Sub

Das Makro funktioniert hervorragend. Nur bräuchte ich es ein wenig abgeändert. Bei mir müsste das Makro vor dem Einfügen der Daten auf das nächste Tabellenblatt aus dem alten Blatt die letzten 111 Zeilen kopieren und in das neue Blatt einfügen und erst dann ab Zeile 112 wieder die Daten aus der Textdatei.
Als Beispiel: Ich habe in der Textdatei 196608 Zeilen. Dann würde das Makro von Ramses die Daten in 3 Tabellenblätter einlesen. Das wären die Blätter Dataset from 1, Dataset from 65536, Dataset from 131072. Nun müssten in Blatt Dataset from 65536 in den Zeilen 1 bis 111 die Daten aus Blatt Dataset from 1 von Zeile 65425 bis 65536 und in Blatt Dataset from 131072 Zeile 1 bis 111 die Daten aus Blatt Dataset from 65536 von Zeile 65425 bis 65536 stehen.
Ich hoffe, jemand hat verstanden um was es mir geht. Der Hintergrund, in der Textdatei stehen Personendaten. Für jede Person sind es 111 Zeilen. Das Problem ist halt, das am Blattende nicht auch die Person zu ende ist, sondern irgendwo mitten drinn. Ich müsste dann in einer nachfolgenden Prüfung, die ich schon hinbekomme, prüfen, wer ist der letzte Name in Blatt Dataset from 1. Diesen müsste ich dann in Blatt Dataset from 65536 suchen. Normalerweise steht der nicht in Blatt Dataset from 65536. Aber durch das Kopieren der letzten 111 Zeilen aus dem Blatt Dataset from 1, müsste der Name mit den Daten auch wieder in dem Blatt Dataset from 65536 auftauchen.
Man ist das kompliziert zu beschreiben. Aber ich hoffe, jemand hat das verstanden.
Danke für die Hilfe und Gruß,
Kasimir.

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Frage zu einem Textimportmakro von Ramses?!?
16.10.2006 15:01:10
Ramses?!?
Hallo Kasimir,
Versuch's mal damit (ungetestet):

Sub Read_Bigdicttxt_File()
'Liest Text Datein mit mehr als 65536 Datensätzen ein
'und erstellt automatisch eine neu Arbetismappe und Worksheets
'Der eingelesene Text wird in Spalte 1 geschrieben
'der Reverse Text in spalte 2
'Hilfsvariable für Anzahl ZUSAMMENGEHÖRENDE Datensätze
Const dGrpLines As Double = 111
'Hilfsvariable für Anzahl Datensätze
Dim Text1 As String
'Variablen für den Array nötig
Dim txtlines As Long, i As Long, n As Long
'Neue Mappe und Variables Tabellenblatt deklarieren
Dim tWkb As Workbook, tWks As String
'Für Office97 muss das Array TextArr als String definiert werden
'Entdeckt duch Gerd Z aus dem Herber Forum
Dim textArr As Variant
Dim ReadFile As String
Dim OldStatusbar
'Dialog öffnen auf Basis von *.dat Files
ReadFile = Application.GetOpenFilename("DAT Files (*.txt;*.dat),")
'Schliessen einer geöffneten Datei
Close #1
'1. Öffnen der Datei
'Den Namen und Pfad bitte anpassen
Open ReadFile For Input As #1
'Die anzahl ist nötig um die Grösse des Arrays zu deklarieren
'Zähler auf 0 setzen
txtlines = 0
Do While Not EOF(1)    ' Schleife bis Dateiende.
Line Input #1, Text1    ' Hilfsvariable zum einlesen verwenden
'Zähler hochzählen
txtlines = txtlines + 1
Loop
'Schliessen der Datei weil Dateiende erreicht wurde
Close #1
'Erneutes Öffnen um zum Dateianfang zu kommen
Open ReadFile For Input As #1    ' Datei zum Einlesen öffnen.
'Array neu auf die Anzahl der Linien initialisieren
ReDim textArr(txtlines)
'Einlesen der Dateien in das Array
For i = 0 To txtlines - 1
Line Input #1, textArr(i)
Next i
Close #1
'Arbeitsmappe erstellen und zuweisen
Workbooks.Add
Set tWkb = ActiveWorkbook
'Alles löschen bis auf eine Tabelle
'>> Kosmetik :-)
For i = Worksheets.Count To 2 Step -1
Application.DisplayAlerts = False
Worksheets(i).Delete
Application.DisplayAlerts = True
Next
OldStatusbar = Application.DisplayStatusBar
'Namen vergeben
Worksheets(1).Name = "Dataset from 1"
tWks = tWkb.Worksheets(1).Name
'Daten in aktuelles Sheet schreiben
n = 1
For i = 1 To txtlines
Application.StatusBar = "Datensatz " & i & " von " & txtlines & " wird eingelesen"
'Neue Tabelle anlegen wenn Zelle 65536 erreicht wurde
If i Mod (65536 - (dGrpLines Mod 65536)) = 0 Then
'Aufsplitten der bisher eingelesenen Daten
'Indem die Trennung anhand von der Semikolons vorgenommen wird
Application.StatusBar = "Datentrennung wird vorgenommen"
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), Semicolon:=True
Range("A1").Select
dataFitting = False
tWkb.Worksheets.Add After:=ActiveSheet
ActiveSheet.Name = "Dataset from " & i
tWks = ActiveSheet.Name
n = 1
End If
'Richtes Wort
tWkb.Worksheets(tWks).Cells(n, 1) = textArr(i)
n = n + 1
Next i
Application.StatusBar = "Datentrennung wird vorgenommen"
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), Semicolon:=True
Range("A1").Select
MsgBox "BigDict.txt vollständig eingelesen"
Application.DisplayStatusBar = OldStatusbar
End Sub

Die Konstante dGrpLines (am Anfang) gibt an wieviel Datensätze zusammengehören und macht den Gruppenbruch (neues Blatt) bei einer vollständigen Gruppe.
Gruss Hansueli
Anzeige
AW: Frage zu einem Textimportmakro von Ramses?!?
16.10.2006 15:14:53
Ramses?!?
Hallo Hansueli,
danke Dir für Deine Antwort. Leider ist das nicht ganz so einfach. Die Datensätze für eine Person betragen zwar 111 Stück, aber leider befinden sich zwischen den einzelnen Personen Datensätze, die nicht zur Person gehören, sondern Allgemein sind. Leider kann man vorher nicht sagen, wie viele Datensätze zwischen den einzelnen Personen stehen und Allgemein sind. Daher wird das wohl nichts werden mit Deiner Lösung. Ich benötige eine Lösung, die mir immer die letzten 111 Zeilen des Vorgängerblattes in das folgende Blatt kopiert und dann weiter die Textdaten einließt.
Nochmal Danke für Deine Hilfe und Gruß,
Kasimir
Anzeige
AW: Frage zu einem Textimportmakro von Ramses?!?
16.10.2006 15:43:49
Ramses?!?
Hallo Kasimir,
Ok, verstanden.
Probier:

Sub Read_Bigdicttxt_File()
'Liest Text Datein mit mehr als 65536 Datensätzen ein
'und erstellt automatisch eine neu Arbetismappe und Worksheets
'Der eingelesene Text wird in Spalte 1 geschrieben
'der Reverse Text in spalte 2
'Hilfsvariable für Anzahl ZUSAMMENGEHÖRENDE Datensätze
Const dGrpLines As Double = 111
Dim iActSheet As Integer
'Hilfsvariable für Anzahl Datensätze
Dim Text1 As String
'Variablen für den Array nötig
Dim txtlines As Long, i As Long, n As Long
'Neue Mappe und Variables Tabellenblatt deklarieren
Dim tWkb As Workbook, tWks As String
'Für Office97 muss das Array TextArr als String definiert werden
'Entdeckt duch Gerd Z aus dem Herber Forum
Dim textArr As Variant
Dim ReadFile As String
Dim OldStatusbar
'Dialog öffnen auf Basis von *.dat Files
ReadFile = Application.GetOpenFilename("DAT Files (*.txt;*.dat),")
'Schliessen einer geöffneten Datei
Close #1
'1. Öffnen der Datei
'Den Namen und Pfad bitte anpassen
Open ReadFile For Input As #1
'Die anzahl ist nötig um die Grösse des Arrays zu deklarieren
'Zähler auf 0 setzen
txtlines = 0
Do While Not EOF(1)    ' Schleife bis Dateiende.
Line Input #1, Text1    ' Hilfsvariable zum einlesen verwenden
'Zähler hochzählen
txtlines = txtlines + 1
Loop
'Schliessen der Datei weil Dateiende erreicht wurde
Close #1
'Erneutes Öffnen um zum Dateianfang zu kommen
Open ReadFile For Input As #1    ' Datei zum Einlesen öffnen.
'Array neu auf die Anzahl der Linien initialisieren
ReDim textArr(txtlines)
'Einlesen der Dateien in das Array
For i = 0 To txtlines - 1
Line Input #1, textArr(i)
Next i
Close #1
'Arbeitsmappe erstellen und zuweisen
Workbooks.Add
Set tWkb = ActiveWorkbook
'Alles löschen bis auf eine Tabelle
'>> Kosmetik :-)
For i = Worksheets.Count To 2 Step -1
Application.DisplayAlerts = False
Worksheets(i).Delete
Application.DisplayAlerts = True
Next
OldStatusbar = Application.DisplayStatusBar
'Namen vergeben
Worksheets(1).Name = "Dataset from 1"
tWks = tWkb.Worksheets(1).Name
'Daten in aktuelles Sheet schreiben
n = 1
For i = 1 To txtlines
Application.StatusBar = "Datensatz " & i & " von " & txtlines & " wird eingelesen"
'Neue Tabelle anlegen wenn Zelle 65536 erreicht wurde
If i Mod 65536 = 0 Then
'Aufsplitten der bisher eingelesenen Daten
'Indem die Trennung anhand von der Semikolons vorgenommen wird
Application.StatusBar = "Datentrennung wird vorgenommen"
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), Semicolon:=True
Range("A1").Select
datafitting = False
iActSheet = ActiveSheet.Index
tWkb.Worksheets.Add After:=ActiveSheet
ActiveSheet.Name = "Dataset from " & i
tWks = ActiveSheet.Name
n = 111
Worksheets(iActSheet).Rows(65536 - dGrpLines & ":" & 65536).Copy Destination:=ActiveSheet.Range("A1")
End If
'Richtes Wort
tWkb.Worksheets(tWks).Cells(n, 1) = textArr(i)
n = n + 1
Next i
Application.StatusBar = "Datentrennung wird vorgenommen"
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), Semicolon:=True
Range("A1").Select
MsgBox "BigDict.txt vollständig eingelesen"
Application.DisplayStatusBar = OldStatusbar
End Sub

Gruss Hansueli
Anzeige
AW: Frage zu einem Textimportmakro von Ramses?!?
16.10.2006 15:11:19
Ramses?!?
Hi Kasimir,
ungetestet:
Option Explicit
Option Base 1
Sub Read_Bigdicttxt_File()
'Liest Text Datein mit mehr als 65536 Datensätzen ein
'und erstellt automatisch eine neu Arbetismappe und Worksheets
'Der eingelesene Text wird in Spalte 1 geschrieben
'der Reverse Text in spalte 2
'Hilfsvariable für Anzahl Datensätze
Dim Text1 As String, zei As Integer, Blatt As String, max As Long
'Variablen für den Array nötig
Dim txtlines As Long, i As Long, n As Long
'Neue Mappe und Variables Tabellenblatt deklarieren
Dim tWkb As Workbook, tWks As String
'Für Office97 muss das Array TextArr als String definiert werden
'Entdeckt duch Gerd Z aus dem Herber Forum
Dim textArr As Variant
Dim ReadFile As String
Dim OldStatusbar
max = 65536
'Dialog öffnen auf Basis von *.dat Files
ReadFile = Application.GetOpenFilename("DAT Files (*.txt;*.dat),")
'Schliessen einer geöffneten Datei
Close
'1. Öffnen der Datei
'Den Namen und Pfad bitte anpassen
Open ReadFile For Input As #1
'Die anzahl ist nötig um die Grösse des Arrays zu deklarieren
'Zähler auf 0 setzen
Do While Not EOF(1)    ' Schleife bis Dateiende.
Line Input #1, Text1    ' Hilfsvariable zum einlesen verwenden
'Zähler hochzählen
txtlines = txtlines + 1
ReDim textArr(txtlines)
textArr(txtlines) = Text1
Loop
'Schliessen der Datei weil Dateiende erreicht wurde
Close
'Arbeitsmappe erstellen und zuweisen
Application.SheetsInNewWorkbook = 1
Workbooks.Add
Application.SheetsInNewWorkbook = 3
Set tWkb = ActiveWorkbook
OldStatusbar = Application.DisplayStatusBar
'Namen vergeben
Worksheets(1).Name = "Dataset from 1"
tWks = tWkb.Worksheets(1).Name
'Daten in aktuelles Sheet schreiben
n = 1
For i = 1 To txtlines
Application.StatusBar = "Datensatz " & i & " von " & txtlines & " wird eingelesen"
'Neue Tabelle anlegen wenn Zelle 65536 erreicht wurde
If i Mod max = 0 Then
max = 65536 - 111
'Aufsplitten der bisher eingelesenen Daten
'Indem die Trennung anhand von der Semikolons vorgenommen wird
Application.StatusBar = "Datentrennung wird vorgenommen"
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), Semicolon:=True
Range("A1").Select
dataFitting = False
Blatt = ActiveSheet.Name
tWkb.Worksheets.Add After:=ActiveSheet
ActiveSheet.Name = "Dataset from " & i
tWks = ActiveSheet.Name
n = 1
Worksheets(Blatt).Rows("1:111").Copy Destination:=ActiveSheet.Range("A1")
End If
'Rechtes Wort
tWkb.Worksheets(tWks).Cells(n + 111, 1) = textArr(i)
n = n + 1
Next i
Application.StatusBar = "Datentrennung wird vorgenommen"
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), Semicolon:=True
Range("A1").Select
MsgBox "BigDict.txt vollständig eingelesen"
Application.DisplayStatusBar = OldStatusbar
End Sub

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
AW: Frage zu einem Textimportmakro von Ramses?!?
16.10.2006 15:22:21
Ramses?!?
Hallo Reinhard,
danke Dir für Deine Antwort. Leider kommt es zu einer Fehlermeldung. Es wird mir die Zeile
tWkb.Worksheets(tWks).Cells(n + 111, 1) = textArr(i)
markiert. Wenn ich mal mit der Maus auf die Variable n fahre, sehe ich, dass diese den Wert 65426 hat. Wenn ich dann noch die 111 dazu addiere, kommt 65537 heraus. Wie bekommt man das hin, dass es nur maximal bis 65536 geht?
Danke und Gruß,
Kasimir
AW: Frage zu einem Textimportmakro von Ramses?!?
16.10.2006 16:24:51
Ramses?!?
Hi Kasimir,
habe den Code angepasst, zum Testn kannst du ja die tt-Schleife drin lasse, geht halt schneller die Liste zu füllen. Datfitting wird bei mir moniert, vielleichtkennt mein XL2000 as nicht, habs nicht geprüft, und txttocolumn habe ich raus weil ich ja nur zahlen habe und keinen text usw.
Grundsätzlich wäre es besser immer gleich 65536 Zeilen als Block einzulesen, weiß aber nie auswendig wie man das macht, Code dazu ist verschollen.
Option Explicit
Option Base 1
Sub Read_Bigdicttxt_File()
Application.ScreenUpdating = False
'Liest Text Datein mit mehr als 65536 Datensätzen ein
'und erstellt automatisch eine neu Arbetismappe und Worksheets
'Der eingelesene Text wird in Spalte 1 geschrieben
'der Reverse Text in spalte 2
'Hilfsvariable für Anzahl Datensätze
Dim Text1 As String, zei As Integer, Blatt As String, max As Long
'Variablen für den Array nötig
Dim txtlines As Long, i As Long, n As Long
'Neue Mappe und Variables Tabellenblatt deklarieren
Dim tWkb As Workbook, tWks As String
'Für Office97 muss das Array TextArr als String definiert werden
'Entdeckt duch Gerd Z aus dem Herber Forum
Dim textArr As Variant
Dim ReadFile As String
Dim OldStatusbar, tt
max = 65536
'Dialog öffnen auf Basis von *.dat Files
'ReadFile = Application.GetOpenFilename("DAT Files (*.txt;*.dat),")
''Schliessen einer geöffneten Datei
'Close
''1. Öffnen der Datei
''Den Namen und Pfad bitte anpassen
'Open ReadFile For Input As #1
''Die anzahl ist nötig um die Grösse des Arrays zu deklarieren
''Zähler auf 0 setzen
'Do While Not EOF(1)    ' Schleife bis Dateiende.
'    Line Input #1, Text1    ' Hilfsvariable zum einlesen verwenden
'    'Zähler hochzählen
'    txtlines = txtlines + 1
'    ReDim textArr(txtlines)
'    textArr(txtlines) = Text1
'Loop
''Schliessen der Datei weil Dateiende erreicht wurde
'Close
''Arbeitsmappe erstellen und zuweisen
txtlines = 150000
ReDim textArr(txtlines)
For tt = 1 To txtlines
textArr(tt) = tt 'hier ggfs eifügen textArr(tt)=cstr(tt) & ";" & cstr(2*tt)
Next tt
Application.SheetsInNewWorkbook = 1
Workbooks.Add
Application.SheetsInNewWorkbook = 3
Set tWkb = ActiveWorkbook
OldStatusbar = Application.DisplayStatusBar
'Namen vergeben
Worksheets(1).Name = "Dataset from 1"
tWks = tWkb.Worksheets(1).Name
'Daten in aktuelles Sheet schreiben
n = 1
For i = 1 To txtlines
Application.StatusBar = "Dataset " & i & " von " & txtlines & " wird eingelesen"
'Neue Tabelle anlegen wenn Zelle 65536 erreicht wurde
If n Mod 65537 = 0 Then
'Aufsplitten der bisher eingelesenen Daten
'Indem die Trennung anhand von der Semikolons vorgenommen wird
Application.StatusBar = "Datentrennung wird vorgenommen"
Columns("A:A").Select
'Selection.TextToColumns Destination:=Range("A1"), Semicolon:=True
Range("A1").Select
'dataFitting = False
Blatt = ActiveSheet.Name
tWkb.Worksheets.Add After:=ActiveSheet
ActiveSheet.Name = "Dataset from " & i
tWks = ActiveSheet.Name
n = 112
ActiveWorkbook.Worksheets(Blatt).Range("A1:IV111").Copy Destination:=ActiveWorkbook.ActiveSheet.Range("A1")
End If
'Rechtes Wort
tWkb.Worksheets(tWks).Cells(n, 1) = textArr(i)
n = n + 1
Next i
Application.StatusBar = "Datentrennung wird vorgenommen"
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), Semicolon:=True
Range("A1").Select
MsgBox "BigDict.txt vollständig eingelesen"
Application.DisplayStatusBar = OldStatusbar
Application.ScreenUpdating = True
End Sub

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
AW: Frage zu einem Textimportmakro von Ramses?!?
16.10.2006 18:05:25
Ramses?!?
HAllo Reinhard,
sorry, dass ich mich erst jetzt melde, aber ich musste erst mal Feierabend machen und nach Hause fahre. Danke Dir für Deine Antwort, aber leider komme ich mit Deinem neuen Makro nicht klar. Wo gebe ich denn nun an, welche Datei eingelesen werden soll? Wenn ich das Makro so laufen lasse, wie Du es in Deiner Antwort aufgeführt hast, erhalte ich 3 Tabellenblätter mit Zahlen. Wenn ich das, was Du auskommentiert hast, wieder rückgängig mache, passiert leider auch nicht viel mehr.
Was mache ich falsch? Kannst Du mir da nochmal unter die Arme greifen? Wäre nett.
Danke und Gruß,
Kasimir
Anzeige
AW: Frage zu einem Textimportmakro von Ramses?!?
16.10.2006 18:23:47
Ramses?!?
Hi Kasimir,
so müßte es gehen. Der Code dauert halt sehr lange...
Sub Read_Bigdicttxt_File()
Application.ScreenUpdating = False
'Liest Text Datein mit mehr als 65536 Datensätzen ein
'und erstellt automatisch eine neu Arbetismappe und Worksheets
'Der eingelesene Text wird in Spalte 1 geschrieben
'der Reverse Text in spalte 2
'Hilfsvariable für Anzahl Datensätze
Dim Text1 As String, zei As Integer, Blatt As String
'Variablen für den Array nötig
Dim txtlines As Long, i As Long, n As Long
'Neue Mappe und Variables Tabellenblatt deklarieren
Dim tWkb As Workbook, tWks As String
'Für Office97 muss das Array TextArr als String definiert werden
'Entdeckt duch Gerd Z aus dem Herber Forum
Dim textArr As Variant
Dim ReadFile As String
Dim OldStatusbar, tt
Dialog öffnen auf Basis von *.dat Files
ReadFile = Application.GetOpenFilename("DAT Files (*.txt;*.dat),")
'Schliessen einer geöffneten Datei
Close
'1. Öffnen der Datei
'Den Namen und Pfad bitte anpassen
Open ReadFile For Input As #1
'Die anzahl ist nötig um die Grösse des Arrays zu deklarieren
'Zähler auf 0 setzen
Do While Not EOF(1)    ' Schleife bis Dateiende.
Line Input #1, Text1    ' Hilfsvariable zum einlesen verwenden
'Zähler hochzählen
txtlines = txtlines + 1
ReDim textArr(txtlines)
textArr(txtlines) = Text1
Loop
'Schliessen der Datei weil Dateiende erreicht wurde
Close
'Arbeitsmappe erstellen und zuweisen
Application.SheetsInNewWorkbook = 1
Workbooks.Add
Application.SheetsInNewWorkbook = 3
Set tWkb = ActiveWorkbook
OldStatusbar = Application.DisplayStatusBar
'Namen vergeben
Worksheets(1).Name = "Dataset from 1"
tWks = tWkb.Worksheets(1).Name
'Daten in aktuelles Sheet schreiben
n = 1
For i = 1 To txtlines
Application.StatusBar = "Dataset " & i & " von " & txtlines & " wird eingelesen"
'Neue Tabelle anlegen wenn Zelle 65536 erreicht wurde
If n Mod 65537 = 0 Then
'Aufsplitten der bisher eingelesenen Daten
'Indem die Trennung anhand von der Semikolons vorgenommen wird
Application.StatusBar = "Datentrennung wird vorgenommen"
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), Semicolon:=True
Range("A1").Select
dataFitting = False
Blatt = ActiveSheet.Name
tWkb.Worksheets.Add After:=ActiveSheet
ActiveSheet.Name = "Dataset from " & i
tWks = ActiveSheet.Name
n = 112
ActiveWorkbook.Worksheets(Blatt).Range("A1:IV111").Copy Destination:=ActiveWorkbook.ActiveSheet.Range("A1")
End If
'Rechtes Wort
tWkb.Worksheets(tWks).Cells(n, 1) = textArr(i)
n = n + 1
Next i
Application.StatusBar = "Datentrennung wird vorgenommen"
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), Semicolon:=True
Range("A1").Select
MsgBox "BigDict.txt vollständig eingelesen"
Application.DisplayStatusBar = OldStatusbar
Application.ScreenUpdating = True
End Sub

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
AW: Frage zu einem Textimportmakro von Ramses?!?
16.10.2006 19:46:39
Ramses?!?
Hallo Reinhard,
danke Dir nochmal für Deine Antwort. Jetzt funktionierts.
Gruß,
Kasimir

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige