Microsoft Excel

Herbers Excel/VBA-Archiv

Datei als csv ablegen

Betrifft: Datei als csv ablegen von: Christian
Geschrieben am: 27.10.2020 19:17:26

Hallo Ihr Guten,
ich habe eine Excel-Datei in einer bereits bestehenden Ordner-Struktur. Gibt es per VBA eine Möglichkeit, diese aus der Excel-Datei per Makro an den gleichen Speicherort als csv-Datei abzulegen?
Ich komme mit meinen eigenen Gedanken leider nicht sehr weit und freue mich über jede Hilfe.
Vielen Dank im Voraus,
Christian

Betrifft: AW: Datei als csv ablegen
von: Hajo_Zi
Geschrieben am: 27.10.2020 19:22:12

Hallo Christian,

benutze den Makrorecorder.

GrußformelHomepage

Betrifft: AW: Datei als csv ablegen
von: Daniel
Geschrieben am: 27.10.2020 19:23:28

Hi
Datei öffnen und mit "Speichern unter" an gleicher Stelle als CSV-Datei speichern (kann man mit dem Recorder aufzeichnen)
um Pfad und Dateinamen zu ermitteln um daraus den neuen Speichernamen zu erzeugen stehen dir die Workookeigenschaften:
.Name (Dateiname)
.Path (Pfad)
.FullName (Pfad\Dateiname)

zur verfügung.
Hilft dir das weiter?
Gruß Daniel

Betrifft: AW: Datei als csv ablegen
von: Christian
Geschrieben am: 27.10.2020 19:30:33

Hi Daniel,
stimmt - vielen Dank für die schnelle Antwort.
Vielleicht denke ich jetzt nicht ganz richtig, aber so lege ich die Datei doch immer an die gleiche Stelle ab, oder? Ich suche jedoch nach einer Möglichkeit, mit der man den Speicherort der jeweiligen Excel "herausliest" und dann dort auch den Speicherort für die csv wählt... wenn so etwas geht.
Viele Grüße
Christian

Betrifft: AW: Datei als csv ablegen
von: Daniel
Geschrieben am: 27.10.2020 19:32:43

die Frage ist, wo genau willst du den Speicherort herauslesen?
Gruß Daniel

Betrifft: AW: Datei als csv ablegen
von: Christian Bömer
Geschrieben am: 27.10.2020 20:00:35

Hey, ich in meiner Welt habe gedacht... die Excel-Datei 1 ist unter C\Ordner1\Tag1 gespeichert, während die Excel-Datei 2 im Ordner Tag2 abliegt. In beiden würde ich also gerne eine csv in den jeweils richtigen Ordner dazulegen. Hier müsste ein Makro ja zunächst den Speicherort der Excel herauslesen, oder?
Viele Grüße
Christian

Betrifft: AW: Datei als csv ablegen
von: Daniel
Geschrieben am: 27.10.2020 20:13:17

wo herauslesen?
Woraus soll der Ordner herausgelesen werden?
aus deinem Kopf?
aus einer bereits geöffneten Datei?
bitte klar formulieren was du haben willst, das ist die Grundvoraussetzung zum Programmieren.

ThisWorkbook ist die Datei, die das Makro erhält.
ThisWorkbook.Name ist der Dateiname dieser Datei
ThisWorkbook.Path ist der Speicherpfad, unter dem diese Datei gespeichert ist
ThisWorkbook.Fullname ist die Kombination aus Speicherpfad und Dateiname.
funktioniert natürlich auch mit ActiveWorkbook.

Gruß Daniel

Betrifft: AW: Datei als csv ablegen
von: Christian
Geschrieben am: 28.10.2020 07:59:29

Hallo Daniel,
da hast Du natürlich recht. Als Laie glaubt man manchmal einfach zu schnell, dass das Problem relativ eindeutig zu sein scheint. Ich meinte aus der geöffneten Excel heraus.
Deine Hinweise helfen mir aber glaube ich schon mal einen Schritt weiter und ich probiere mich jetzt einfach mal aus.
Danke Dir sehr bis hierhin.
Viele Grüße
Christian

Betrifft: AW: Datei als csv ablegen
von: Christian
Geschrieben am: 28.10.2020 09:08:23

Hey, ich habe das Thema (für mich klappt es zumindest) nun so gelöst:

Dim FName As String

FName = ActiveWorkbook.Path & "\" & Left(ActiveWorkbook.Name, _
InStr(ActiveWorkbook.Name, ".")) & _
"csv"

ActiveSheet.Copy
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=FName, FileFormat:=xlCSV
Application.DisplayAlerts = True
ActiveWorkbook.Close False

Vielen Dank für die Hinweise!
Christian

Betrifft: AW: Datei als csv ablegen
von: Daniel
Geschrieben am: 28.10.2020 09:26:10

Hi
ja, im Prinzip so.
das ".csv" am ende brauchst du nicht, das fügt Excel beim Speicher Unter automatisch und damit passend zum gewählten Dateityp hinzu.

in Verbindung mit FullName wird's dann noch einfacher:
FName =ActiveWorkbook.FullName
FName = Left(FName, InstrRev(FName, ".") - 1)

InstrRev ist hier vorzuziehen, weil es den Text vom Ende her beginnend durchsucht und somit sicher den Punkt der Dateierweiterung findet, denn mittlerweile sind Punkte im Dateinamen auch an anderer Stelle erlaubt und dann würde Instr den falschen Punkt finden.

bzw, wenn du dir sicher bist, dass du nicht mehr mit alten xls-Dateiformaten arbeitest:
FName = Left(ActiveWorkbook.Fullname, Len(ActiveWorkbook.FullName) - 4)
Gruß Daniel