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

Sheet-Export in txt - Speicherung mit 'now'

Sheet-Export in txt - Speicherung mit 'now'
Dietmar
Guten Morgen in die Runde,
habe nachfolgenden Code hier (von Sepp) gefunden, der für meine Belange schon sehr gut ist.
Der Code überschreibt aber die bestehende Datei ständig. Ich möchte aber immer neu speichern,
wenn Datum und Zeit sich ändern (minutengenau).
Perfekt wäre folgende Anpassung:
1) Die txt soll nicht überschrieben werden, sondern fortlaufend minutengenau abgelegt werden.
2) Der name der txt-Datei soll sich aus dem Wort 'Sicherung', dem Inhalt von Tabelle1("A1") und dem aktuellen Datum mit Uhrzeit generieren.
Vielen vorab für jeden Tipp!
Viele Grüße
Dietmar
Sub exportFixedLength()
Dim strFile As String, strTmp As String * 30, strOut As String
Dim lngRow As Long, lngLastRow As Long, lngCol As Long, lngLastCol As Long
Dim FF As Integer
' HIER VERMUTLICH DIE ANPASSUNG:
strFile = "C:\Testumgebung\Testordner1\Sicherung.txt" 'Speicherort und Dateiname
With Sheets("Tabelle2")
lngLastRow = .UsedRange.SpecialCells(xlCellTypeLastCell).Row
lngLastCol = .UsedRange.SpecialCells(xlCellTypeLastCell).Column
FF = FreeFile
Open strFile For Output As #FF Len = lngLastCol * 30
For lngRow = 1 To lngLastRow
strOut = ""
For lngCol = 1 To lngLastCol
strTmp = .Cells(lngRow, lngCol).Text
strOut = strOut & strTmp
Next
Print #FF, strOut
Next
Close FF
End With
End Sub

Dateiname mit Uhrzeit
03.12.2011 12:06:03
Erich
Hi Dietmar,
zu 2. probier mal

strFile = "C:\Testumgebung\Testordner1\Sicherung" & _
Sheets("Tabelle1").Cells(1, 1) & _
Format(Now, "yymmdd-hhmm") & ".txt" 'Speicherort und Dateiname
Wird 1. vielleicht durch 2. erledigt?
Es steht nirgends, wann/wie oft die Routine aufgerufen wird. Darauf kommt es aber wohl auch an.
Nebenbei:
Warum hast du nicht beschrieben, wie der Dateiname genau aussehen sollte?
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Das ist es! Dennoch Ergänzungsfragen ...
03.12.2011 13:38:13
Dietmar
Hallo Erich,
vielen Dank für Deine schnelle Antwort.
Das passt!
Du hast natürlich recht. Mein Wunsch zu1) wird durch 2) erledigt, da mit jeder neuen Minute ein neuer Dateiname erzeugt wird, so dass keine Überschreibung stattfindet :-)
Zu Deiner Nebenbeifrage:
Den Code möchte ich dazu nutzen, um ein ressourcenschonendes Journal zu erzeugen, das lediglich die verbuchten Werte in aus meiner Original-Datei festhält; daher txt.
Zum 'wie oft' Folgendes: Der Code soll in einen bestehenden VBA-Code eingebaut werden, der einzelne Kunden abrechnet. Das geschieht natürlich auch in Excel, aber ich möchte eine ausgelagerte Sicherheit einbauen.
Noch eine Verständnisfrage und eine kl. Ergänzung:
1) Wozu steht eigentlich in der Variablendeklaration '* 30' und dann auch noch im Code selbst.
Ich habe festgestellt, dass die Spaltenbreit auch dann verändert wird, wenn ich es nur in der Variablendeklaration ändere.
2) Kann man die Spaltenbreiten in der txt-Datei variieren; z.B. Spalte A '* 30' und die anderen '* 10'. Hintergrund: In Spalte A steht die Artikelbezeichnung, die mehr Platz benötigt. Alle anderen Spalten benötigen maximal Platz für eine 6-stellige Zahl.
Besten Dank!
Viele Grüße aus Aachen
Dietmar
Anzeige
AW: Das ist es! Dennoch Ergänzungsfragen ...
04.12.2011 08:43:15
Christian
Hallo Dietmar,
strTmp As String * 30: ist ein String mit fester Länge (in diesem Fall 30).
ebenso kann man der Open-Anweisung eine Satzlänge als Parameter mitgeben.
näheres siehe VBA-Hilfe.
Ob das für deinen Fall Sinn macht, kann ich nicht sagen, aber da du speziell diesen Code aus dem Archiv genommen hast, geh ich davon aus, dass du das so willst.
Häufig ist eine Abgrenzung der Felder mit 'nem Separator wie Komma oder Semikolon geeigneter.
Gruß
Christian
Ok, danke! Ich taste mich weiter vor ...
04.12.2011 15:08:41
Dietmar
Hallo Christian,
vielen Dank für Deiner Erläuterungen. Das habe ich verstanden.
Auf den Code bin ich bei entsprechender Recherche gestoßen. Er hat mir genau deshalb gefallen, weil nicht mit Komme pp. unterteilt wird, sondern besser lesbar Spalten dargestellt werden.
Nun taste ich mich noch etwas weiter vor: Die Darstellung aller genutzten Spalten ergibt in meiner Originaldatei ziemlich viele Spalten.
Daher noch folgende Frage:
Wie kann ich EINZELNE SPALTEN definieren, die ich in der Textdatei dargestellt haben möchte?
Ich möchte gerne die Spalte A:C, F und J darstellen können.
'For lngCol = 1 To 3' bekomme ich hin, aber die zusätzliche Darstellung einzelner Spalten nicht :-(
Viele Grüße aus Aachen
Dietmar
Anzeige
AW: Ok, danke! Ich taste mich weiter vor ...
04.12.2011 16:55:57
Christian
Hi,
du könntest zB die relevanten Spaltennr. zuvor in ein Array schreiben
Dim vntCol
vntCol = Array(1, 2, 3, 6, 10)

und dann das Array abklappern
For lngCol = 0 To Ubound(vntCol)
strTmp = .Cells(lngRow,vntCol(lngCol)).Text
Gruß
Christian
danke, leider Fehlermeldung ...
04.12.2011 21:34:31
Dietmar
Hallo Christian,
bekomme leider die Meldung für einen objektdefinierten Fehler.
Habe Deine Ergänzung wahrscheinlich falsch eingebaut.
Schau doch mal bitte.
https://www.herber.de/bbs/user/77813.xls
Vielen Dank!
Gruß
Dietmar
Anzeige
unvollständig eingebaut
05.12.2011 00:22:47
Erich
Hi Dietmar,
Christian hatte dir genau beschrieben, was du ändern solltest. :-)
Von den beiden Zeilen unter "und dann das Array abklappern" hast du aber nur die erste umgesetzt. :-(
Überleg dir mal, was es bedeutet, dass dir Christian
.Cells(lngRow,vntCol(lngCol)).Text
statt
.Cells(lngRow, lngCol).Text
empfohlen hat.
Hier noch mal der Code:

Sub exportFixedLength_2()  'Version für exakt bezeichnete Einzel-Spalten
Dim strFile As String, strTmp As String * 12, strOut As String
Dim lngRow As Long, lngLastRow As Long, lngCol As Long, lngLastCol As Long
Dim FF As Integer
Dim vntCol 'von Christian
vntCol = Array(1, 2, 3, 6, 10) 'von Christian
strFile = "C:\Testumgebung\Testordner1\Sicherung-Journal-" & _
Sheets("Tabelle1").Cells(1, 1) & "-" & _
Format(Now, "yymmdd-hhmm") & ".txt"    ' Speicherort und Dateiname
With Sheets("Tabelle2")
lngLastRow = .UsedRange.SpecialCells(xlCellTypeLastCell).Row
lngLastCol = .UsedRange.SpecialCells(xlCellTypeLastCell).Column
FF = FreeFile
Open strFile For Output As #FF Len = lngLastCol * 30
For lngRow = 1 To 20
strOut = ""
For lngCol = 0 To UBound(vntCol) 'von Christian
strTmp = .Cells(lngRow, vntCol(lngCol)).Text
strOut = strOut & strTmp
Next lngCol
Next lngRow
Print #FF, strOut
Close FF
End With
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
außerdem macht es keinen Sinn ...
05.12.2011 20:46:57
Christian
... die fixe Länge des Strings je Spalte auf 12 Zeichen zu begrenzen und dann bei der Open-Anweisung mit dem Multiplikator 30 zu arbeiten, Dietmar.
Schau dir hierzu mal bei den erzeugten File im Text-Editor die überflüssigen Leerzeichen an.
Wie gesagt halte ich es bei den meisten Fällen für sinnvoller, bei txt-Files und ähnlichem 'nen Delimiter/Separator zu verwenden. Das muss ja keiner lesen können außer du selbst - und selbst das wäre nur beim debuggen notwendig, denn die Datenstruktur hast du ja selbst festgelegt.
Gruß
Christian
PS: auch bzgl. Rückmeldung schließe ich mich Erich an.
Anzeige
ok, aber ...
05.12.2011 21:30:45
Dietmar
Hallo Christian,
vielen Dank für Deine Hilfe.
Aber zum einen finde ich lesbare Txt, sofern sie machbar sind, viel angenehmer, weil ich diese Datei ja als
eine Art Journal führen möchte, das durchaus auch vernünftig lesbar sein sollte. Deshalb hat mir der UrsprungsCode von Sepp ja auch so gut gefallen.
Und zum anderen wird das Problem, dass nun nur noch die Zeile 19 ausgelesen wird nicht dadurch verhindert, dass ich die Stinglänge (wie im UrsprungsCode) auch wieder auf * 30 setze.
Wenn ich 'For lngCol = 1 To 5' (also zusammenhängend 5 Spalten) angebe funktioniert es ja.
Nur wenn die Einzel-Spalten festgelegt werden, funktioniert es nicht.
Wobei dann zwar die gewünschten Spalten übertragen werden, ABER nur von Zeile 19. Und das ist etwas, war ich nun gar nicht nachvollziehen kann.
Hoffe es gibt eine Lösung. Denn dann wäre es perfekt für mich :-)
Danke und viele Grüße
Dietmar
Anzeige
ok, verstanden, aber nun wird ...
05.12.2011 21:03:57
Dietmar
Hallo Erich,
besten Dank für Deine Untersützung.
Überlegt habe ich, und beim Lesen des Codes auch verstanden, warum es sein muss.
Aber es fällt mir schwer, proaktiv auf die Lösungen zu kommen.
Allerdings:
Nun werden die vorgesehenen Spalten zwar übertagen, allerdings nicht die vorgesehenen Zeilen 1 - 20,
sondern nur die 19. Zeile.
Irgendetwas beißt sich hier, oder?
Ich komme aber auch nach Überlegen :-) nicht drauf.
Viele Grüße
Dietmar
AW: ok, verstanden, aber nun wird ...
05.12.2011 21:32:48
Christian
ja, da ist bei Dietmar wohl eine Zeile verrutscht.
Print #FF, strOut

gehört hier vor

Next lngRow

da das Text-File hier ja Zeilenweise geschrieben wird
Gruß
Christian
Anzeige
ok Christian :-) Jetzt ist es PERFEKT ! ...
05.12.2011 21:45:05
Dietmar
Sorry, dass ich im Eifer des Gefechts den Erich als Christian vertauscht habe.
Jedenfalls DANKE, denn nun passt es wirklich perfekt und ich kann die Exporte planen, die sich in meiner
Originaldatei am besten für das jeweilige Journal eignen.
Also:
Christian, Dir noch einen schönen Rest-Abend :-)
Viele Grüße
Dietmar
Danke für Feedback ...
05.12.2011 21:54:49
Christian
Gruß von und nach Aachen
oha ... :-) owT
05.12.2011 22:11:17
Dietmar

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige