Mit VBA txt-datei erstellen und abspeichern

Hallo Leute,

erstmal die komplette Aufgabenstellung:
„Es stehen verschiedene Werte in einer Excel Tabelle mit dem Namen „abc“. Aus dieser Tabelle sollen jetzt alle Werte der Spalte B in eine Textdatei geschrieben werden. Die Werte sollen alle untereinander stehen, also mit vbcrlf. Beim ausführen des Makros soll der User dann noch gefragt werden, wohin die Textdatei gespeichert werden soll. Also wenns geht, soll beim Speichern schon ein fester Pfad drin stehen, nur den Speichernamen der Datei soll man noch umändern können. Soll aber schon „beispiel.txt“ oder so drin stehen. weil diese Textdatei wird dann in SAP eingelesen.“

Mein Hauptproblem liegt dabei, dass ich den Pfad für die Text-datei selbst in so einem Standard-abspeicher-Dialog wählen kann.
Habe bis jetz schon kräftig gegoogelt und bin nur immer auf „getopenfilename“ und „getsavefilename“ gekommen, was nicht so ganz passt.

Achja, hier der bisherige Code:

Sub TextSpeichern()

Dim Inhalt As String
Dim i As String
i = 1

Open !!! For Output As #1
Do While Cells(i, 2) „“

Inhalt = Cells(i, 2) & vbCrLf
Print #1, Inhalt
i = i + 1
Loop

Close #1

End Sub

Hi,
eigentlich ist das hier eine „Selbsthilfegruppe“.
Wir nehmen Programmierern nicht die Arbeit weg.
Und schon gar nicht, wenn es für den (Deinen) Arbeitgeber ist.
Der hat genügend Kohle, um eine kleine Programmierung zu zahlen.
Und SAP wird ja wohl kaum privat eingesetzt.
Zweiter Knackpunkt: hier bekommst Du jetzt Hilfe und wenn es dann mal brennt, musst Du Deinem Arbeitgeber gestehen, dass der Code nicht von Dir ist und Du ggf. nicht durchblickst.

Da es aber nur eine einfache Ergänzung ist, will ich mal nicht so sein.
Ich hoffe, ich habe das Problem richtig aus deinem verquasten Text herausgelesen.

Sub TextSpeichern()

Dim Inhalt As String
Dim i As String
Dim MyName As String
Dim MyPath As String
Dim MyFile As String
Dim Dummy As String

i = 1
MyPath = "C:\Users\Karl\Documents\Temp\" 'Hier geht's hin

MyName = InputBox("Dateiname eingeben", "Speicherort", "test")

MyFile = MyPath & MyName & ".txt"

'löschen ggf. vorhandener Datei
Dummy = Dir(MyFile)
If Dummy "" Then
 Kill (MyFile)
End If

Open MyFile For Output As #1
'Beim Anhängen an bestehender Datei: Open MyFile For Append As #1

Do While Cells(i, 2) ""

Inhalt = Cells(i, 2) & vbCrLf
Print #1, Inhalt
i = i + 1
Loop

Close #1

End Sub

MyPath musst Du natürlich anpassen

Hallo,
ich kann Dir gerade nicht folgen.
Was genau geht jetzt nicht so wie Du es willst?

Hi,

sorry, meine Kenntniss beim VBA - Programmieren bezieht sich auf Access.

Gruß
Karsten

Hi,
erstmal danke für deine Antwort. Ich will ja nicht dass du die Aufgabe für mich komplett löst, außerdem bin ich Student und mach das nicht für einen Arbeitgeber sondern für einen Freund der mich um Rat gefragt hat. Vielleicht hab ich mich undeutlich ausgedrückt. Ich brauch nur ne Antwort darauf wie man einen Pfad in eine Stringvariable speichert durch das benutzen von dem Standarddialog(speichern oder öffnen).

gruß

Hallo!

um das Verzeichnis vor dem Aufruf der Dialogmasken einzustellen, kannst Du die Funktionen ChDrive und ChDir verwenden. Allerdings kann es dann vom Benutzer auch wieder verändert werden.

Um nur ein einziges Verzeichnis zuzulassen, könntest Du mit Inputbox nur nach dem Namen fragen und den Pfad im Makro ergänzen.

Thomas Jansen
www.SoftwareArtist.de

Also ich verstehe es immer noch nicht.
Du willst also, dass beim Menuepunkt Datei, Öffnen ein fester ((unveränderbarer?) Pfad vorgegeben wird? oder soll er ermittelt/ausgelesen werden?
Und das selbe nochmals bei Datei, Speichern und nochmals unter Datei Speichern unter?
Oder benutzt Du zum Speichern die VBA-Befehle von FileDialog ?

Hallo Bey9

Beim
ausführen des Makros soll der User dann noch gefragt werden,
wohin die Textdatei gespeichert werden soll. Also wenns geht,
soll beim Speichern schon ein fester Pfad drin stehen, nur den
Speichernamen der Datei soll man noch umändern können. Soll
aber schon „beispiel.txt“ oder so drin stehen. weil diese
Textdatei wird dann in SAP eingelesen."

Google nach Common Dialog. Den bindet man per API-Call ein. Resultat ist ein standard-Öffnen Dialog. Welches Verzeichnis und welcher Dateiname voreingestellt sein sollen, kann man dem mitgeben.

Achja, hier der bisherige Code:

Sub TextSpeichern()

Dim Inhalt As String
Dim i As String
i = 1

Open !!! For Output As #1
Do While Cells(i, 2) „“

Inhalt = Cells(i, 2) & vbCrLf
Print #1, Inhalt
i = i + 1
Loop

Close #1

End Sub

Tipp: In die erste Zeile eines jeden Moduls immer „Option Explicit“ und die Variablen dann explizit deklarieren. Das vermeidet eine Menge Probleme die durch Zuweisen unpassender Werte an Variablen entstehen oder durch Schreibfehler in den Variablennamen.

Eine Laufvariable (dein i) ist als String deklariert. Zahlen sind aber keine Strings. In deinem Fall würde man Integer nehmen als Datentyp.

Open … For Output as #1 geht. Falls die Dateinummer aber aus irgend einem Grund belegt sein sollte, bekommst du eine Fehlermeldung. Sauberer wäre:

Dim intFileNum as Integer

intFileNum = FreeFile
Open … For Output as #intFileNum

Auf Zellinhalt greift man mit .Value zu
Also Cells(i,2).Value nehmen.

Das vbcrlf am Ende des Strings zu ergänzen ist unnötig, weil dieser automatisch mit dem Print-Befehl ans Ende der Zeile angehängt wird.

Ich hoffe, ich konnte dir damit schon mal weiterhelfen.

Gruß

Manuel

tut mir leid, bin momentan nicht in der Lage zu antworten.

Sorry für meine späte Antwort.

Leider habe ich derzeit keinen Zugriff auf eine Microsoft Office Version mehr. Daher kann ich keine Unterstützung mehr bieten.

Sorry,
kann hier nicht weiterhelfen.