Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1020to1024
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

Werte aus PRN Datei einlesen über 65563 Zeilen

Werte aus PRN Datei einlesen über 65563 Zeilen
04.11.2008 08:39:00
Andre´
Hallo alle zusammen,
Ich lese aus einer PRN-Datei die Werte ins Excel ein wie folgt:
Option Explicit
Sub Daten_einlesen() Dim iFree As Integer, strText As String, arrTmp, arrDaten() Dim lngCounter As Long, lngStart As Long, lngEnde As Long ReDim arrDaten(1 To 11, 1 To 1) iFree = FreeFile lngStart = ThisWorkbook.Worksheets("Admin").Range("C6") 'Anfangs-Datumswert lngEnde = ThisWorkbook.Worksheets("Admin").Range("C7") 'End-Datumswert Open ThisWorkbook.Worksheets("Admin").Range("B3") For Input As iFree 'Pfad zur prn.Datei Do While Not EOF(iFree) Line Input #iFree, strText arrTmp = Split(strText, ";") Select Case CDate(arrTmp(0)) Case lngStart To lngEnde lngCounter = lngCounter + 1 ReDim Preserve arrDaten(1 To 11, 1 To lngCounter) arrDaten(1, lngCounter) = arrTmp(0) arrDaten(2, lngCounter) = arrTmp(1) arrDaten(3, lngCounter) = arrTmp(2) arrDaten(4, lngCounter) = arrTmp(3) arrDaten(5, lngCounter) = arrTmp(4) arrDaten(6, lngCounter) = arrTmp(5) arrDaten(7, lngCounter) = arrTmp(6) arrDaten(8, lngCounter) = arrTmp(7) arrDaten(9, lngCounter) = arrTmp(8) arrDaten(10, lngCounter) = arrTmp(9) arrDaten(11, lngCounter) = arrTmp(10) End Select Loop Close iFree If lngCounter = "0" Then GoTo Ende ThisWorkbook.Worksheets("1").Range("A2:K1048576").ClearContents ThisWorkbook.Worksheets("1").Range("a2").Resize(lngCounter, 11) = WorksheetFunction. _ Transpose(arrDaten) Ende: End Sub


Jetzt habe ich das Problem, wenn mehr als 65563 Zeilen kopiert wurden, dass ich diese nicht in Excel einfügen kann. Habe die Zeile im Makro fett hinterlegt, wo das Makro dann hängen bleibt.
Da dies mit Excel 2007 funktionieren soll und dort bekanntlich 1048576 Zeilen vorhanden sind, suche ich eine Möglichkeit auch mehr als 65563 Zeilen einzulesen. Vielleicht muss Stepp für Stepp also die ersten 65500 Zeilen einlesen dann die nächsten.....
Gibt es dafür eine Lösung
Vielen Dank im Voraus!
MFG Andre

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Werte aus PRN Datei einlesen über 65563 Zeilen
04.11.2008 09:14:00
Rudi
Hallo,
das hängt nur an der Transpose-Funktion.
Schreibe die Daten über eine Schleife in ein zweites Array, das du dann in die Tabelle schreibst.

Dim Arr2(1 to lngCounter, 1 to 11)
for i=1 to lngCounter
For j=1 to 11
arr2(i,j)=arrDaten(j,i)
Next
Next
With ThisWorkbook.Worksheets("1")
.Range("A2:K1048576").ClearContents
.Range("a2").Resize(lngCounter, 11) =Arr2
End With


Gruß
Rudi

AW: Werte aus PRN Datei einlesen über 65563 Zeilen
04.11.2008 10:51:53
Andre´
Hallo Rudi,
mit:
ReDim Arr2(1 To lngCounter, 1 To 11)
statt:
Dim Arr2(1 To lngCounter, 1 To 11)
funktioniert es.
Vielen DANK!
MFG Andre
Anzeige
AW: Werte aus PRN Datei einlesen über 65563 Zeilen
04.11.2008 10:43:00
Erich
Hallo André,
wenn du arrDaten anders herum deklarierst - mit arrDaten(1 to AnzZeilen, 1 to 11) - ,
brauchst du Transpose überhaupt nicht.
Nachteilig für die Geschwindigkeit ist wohl auch das "Redim Preserve" bei jeder Zeile.
Schneller dürfte es sein, die benötigte Dimension in einem vorgelagerten Zählvorgang zu bestimmen.
Durch das ".Rows.Count" läuft der Code auch - bis zur max. Zeilenzahl - in früheren XL-Versionen.
Probier mal

Sub Daten_einlesen()
Dim iFree As Integer, strText As String, arrTmp ', arrDaten()
Dim lngZ As Long, lngStart As Long, lngEnde As Long, lngD As Long
Dim ii As Integer
With ThisWorkbook.Worksheets("Admin")
lngStart = .Range("C6")                'Anfangs-Datumswert
lngEnde = .Range("C7")                 'End-Datumswert
iFree = FreeFile
Open .Range("B3") For Input As iFree   'Pfad zur prn.Datei
Do While Not EOF(iFree)
Line Input #iFree, strText
lngD = CDate(Left(strText, InStr(strText, ";") - 1))
If lngStart  0 Then
With ThisWorkbook.Worksheets("1")
.Range("A2:K" & .Rows.Count).ClearContents
.Range("a2").Resize(lngZ, 11) = arrDaten
End With
End If
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Werte aus PRN Datei einlesen über 65563 Zeilen
04.11.2008 11:08:24
Andre´
Hallo Erich,
echt Klasse Dein Tipp.
Benötige für 93607 Zeilen nur ca.10 Sekunden anstatt ca. 1 Minute!!!
Auch Dir Vielen Dank!
MFG Andre
AW: Werte aus PRN Datei einlesen über 65563 Zeilen
04.11.2008 12:42:35
Andre´
Hallo alle zusammen,
habe doch noch eine Frage.
Da auch in Excel 2007 die Zeilen begrenzt sind und es doch vorkommen wird das in der PRN Datei mehr Zeilen enthalten sind die alle eingelesen werden sollen, müsste die Möglichkeit bestehen quasi für jeweils 65000 Zeilen diese in ein eigenes Blatt zu kopieren. Weil in Worksheets("1") wo die Daten jetzt eingelesen werden einige Zellen mit der Bedingter Formatierung versehen sind.
Angenommen es sind 195003 Zeilen die eingelesen werden, dann müsste das Worksheets("1") 3mal kopiert werden und die Daten mit den jeweils 65000 Zeilen in die ersten 3 Blatter verteilt und die übrigen 3 Zeilen in ein weiters Blatt erstellt werden.
Gibt es für diesen Fall auch eine Lösung
MFG Andre
Anzeige
Danke für den Tipp, werd mal schauen oT.
04.11.2008 14:18:25
Andre´
AW: Werte aus PRN Datei einlesen über 65563 Zeilen
06.11.2008 00:59:00
Daniel
Hi
probier mal das Makro hier aus:
sobald eine festgelegte Zeilenzahl erreicht ist, werden die eingelesenen Daten auf ein neues Blatt kopiert.
dh. du kannst eigentlich beliebig viele Daten einlesen, solange bis der Speicher voll ist und keine Sheets merh angelegt werden können.
Dadurch, daß die absolute Anzahl der Zeilen in der Datei nicht mehr benötigt wird, kann auch die erste Schleife entfallen:

Sub Daten_einlesen()
Dim iFree As Integer, strText As String, arrTmp ', arrDaten()
Dim lngZ As Long, lngStart As Long, lngEnde As Long, lngD As Long
Dim ii As Integer
Const MaxZeilen = 65000 'Maximale Zeilenanzahl pro Blatt
With ThisWorkbook.Worksheets(1)
lngStart = .Range("C6")                'Anfangs-Datumswert
lngEnde = .Range("C7")                 'End-Datumswert
ReDim arrdaten(1 To MaxZeilen, 1 To 11)
lngZ = 0
iFree = FreeFile
Open .Range("B3") For Input As iFree   'Pfad zur prn.Datei
Do While Not EOF(iFree)
Line Input #iFree, strText
arrTmp = Split(strText, ";")
lngD = CDate(arrTmp(0))
If lngStart  0 Then 'Restdaten in neues Blatt schreiben
Worksheets.Add
Range("A2").Resize(UBound(arrdaten, 1), UBound(arrdaten, 2)).Value = arrdaten
End If
End Sub


Gruß, Daniel

Anzeige
AW: Werte aus PRN Datei einlesen über 65563 Zeilen
06.11.2008 16:45:00
Andre´
Hallo Daniel,
die Daten im ersten Blatt werden korrekt angezeigt nachfolgend der Ausschnitt der letzten Zeilen des 1. Blattes:
Tabelle5

 ABCDEFGHIJK
6500025.10.2008  04:32:48L1_0157422L1_3C5 885 405 EC XDE3C5 885 805 EN XDE3C5 885 806 EM XDEK52  25.10.2008  04:35:07
6500125.10.2008  04:33:19L1_0157423L1_3C5 885 405 EC XDE3C5 885 805 EN XDE3C5 885 806 EM XDEK52  25.10.2008  04:35:38
65002           


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
aber im 2. Blatt wird in der Spalte B2 begonnen und dann fehlen auch noch Werte in der Spalte L bzw. wenn in a2 eingetragen dann in Spalte K
Tabelle6

 ABCDEFGHIJKL
2 25.10.2008  04:33:51L1_0157424L1_3C5 885 405 EC XDE3C5 885 805 EN XDE3C5 885 806 EM XDEK52   
3 25.10.2008  04:34:21L1_0157425L1_3C5 885 405 EC XDE3C5 885 805 EN XDE3C5 885 806 EM XDEK52   


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Hier ist ein Auszug aus der PRN Datei da sind die 4 Zeilen zusehen die auch oben abgebildet sind.
https://www.herber.de/bbs/user/56564.txt
MFG Andre
Anzeige
AW: Werte aus PRN Datei einlesen über 65563 Zeilen
06.11.2008 23:40:00
Daniel
Hi
ich hab beim zweiten ReDim nur "11" statt "1 to 11" für die 2. Dimesion angegeben.
wenn du das noch korrigierst, dann müsste es passen.
Gruß, Daniel
Vielen Dank funktioniert prima :-)))
07.11.2008 10:16:46
Andre´

328 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige