Clever-Excel-Forum

Normale Version: Beim speichern von XLSX, automatisch auch speichern aller Arbeitsblätter als CSV-UTF8
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich habe eine Excel-Datei, die aus verschiedenen verknüpften Arbeitsblättern besteht.
Wenn ich in Arbeitsblatt 1 etwas ändere, hat dies auch Auswirkungen auf Arbeitsblatt 2 und 3.
Da ich die Daten die ich dort verwalte als CSV-UTF8 benötige speichere ich diese momentan dann jeweils pro Arbeitsblatt manuell.
Aber - das hat jedesmal zur Folge, dass aus der geöffneten Datei auch immer die csv-Datei wird.
Ich möchte aber eingentlich beim Speichern der XLSX - Datei automatisch erwirken, dass die Excel-Datei gespeichert wird und das alle Arbeitsblätter der XLSX-Datei dann jeweils mit dem Namen des Arbeitsblattes als CSV-UTF8 gespeichert wird. 

Wie kann man dies lösen? 

Hat hier jemand eine Idee?

Würde mich freuen!
DANKE
Klicken!
Ausprobieren.
Freuen.
also bei meinem google wird mir da keine Lösung für Angeboten. 
Wie ich eine CSV in UTF speicher habe ich ja verstanden.
Es geht darum beim Speichern automatisch:

XLSX - speichern
+ alle Arbeitsblätter als UTF8 - CSV

Trotzdem Danke für Deine Mühe!
Hallöchen,

für so einfachere Aufgaben reicht oft auch der Makrorekorder. Du kannst damit Deine manuellen Aktionen in einem Makro aufzeichnen und anschließend einem Button zuweisen. Dann geht das da snächste mal auf Knopfdruck. wenn doch was nicht passt, können wir den Code analysieren und ggf. anpassen.
Hallo Zusammen,

ich habe jetzt ein Makro gebastelt. 
Das funktioniert auch wunderbar.
Code:
Sub CSV_UTF8()
sheet_name = ActiveSheet.Name
Dim CSVBook As Workbook
Set CSVBook = Workbooks.Add
ThisWorkbook.Sheets(sheet_name).Copy Before:=CSVBook.Sheets(1)
CSVBook.SaveAs Filename:="D:\pfad\" & sheet_name & ".csv" _
        , FileFormat:=xlCSVUTF8, CreateBackup:=False, local:=True
CSVBook.Close

Aber wie bekomme ich es jetzt hin, das erzeugte CSV-File direkt auf den FTP zu transferieneren?
Habe hierzu folgendes Skript gefunden:

Code:
Function FTP_Upload_File(QuellDatei As String, ZielDatei As String, FTPServer As String, FTPBenutzer As String, FTPKennwort As String) As Long
   Dim FTP             As Inet
   Dim ExecString      As String
   
   On Local Error GoTo FuncExit
   
   '-----------------------------------------------------------------------
   ' Verbindungsaufbau
   '-----------------------------------------------------------------------
   Set FTP = New Inet
   With FTP
       .Protocol = icFTP
       .RemoteHost = FTPServer
       .Username = FTPBenutzer
       .Password = FTPKennwort
       '-------------------------------------------------------------------
       ' Upload
       '-------------------------------------------------------------------
       ExecString = "put " & Chr(34) & QuellDatei & Chr(34) & " " & Chr(34) & ZielDatei & Chr(34)
       .Execute .URL, ExecString
       Do While .StillExecuting
           DoEvents
       Loop
   End With
   
FuncExit:
   FTP_Upload_File = FTP.ResponseCode
   Set FTP = Nothing
End Function
Kann mir jemand helfen, wie ich dieses Skript so ändern kann, dass es die erzeugte Datei direkt via FTP hochladen kann?

Ich bitte um Rückmeldung.
DANKE
Hallöchen,

im ersten Teil fehlt eventuell etwas Code? Da ist kein End Sub dabei,
Hast Du den Aufruf der Funktion schon hinbekommen und es hapert nur in der Function oder klemmt es schon beim Aufruf?


Da es sich um eine Funktion handelt, musst Du sie im Prinzip so aufrufen:

result=FTP_Upload_File(…)

und die darin enthaltenen Parameter mitgeben.

Beim ftp gibst Du lediglich die Namen der Dateien mit. Damit es funktioniert, musst Du aber ggf. noch das lokale und das Zielverzeichnis wechseln - lokal mit lcd und remote reicht cd.
Hallöchen,

noch ein Hinweis:

Zitat:Damit es funktioniert, musst Du aber ggf. noch das lokale und das Zielverzeichnis wechseln - lokal mit lcd und remote reicht cd.

Den Verzeichniswechsel mit lcd und cd musst Du in der Funktion programmieren - hier sind die ftp-Kommandos gemeint.
Guten Sonntag,

ich komme irgend wie nicht weiter. 
Ich habe leider nicht verstanden, wie ich die Funktion denn dann zum speichern nutzen kann? 
Wie muss die Funktion aufgerufen werden und wie lautet der Übergabe wert? 

Ich bitte um Rückmeldung.
DANKE
hallöchen,

erst mal ein Teil vom Aufruf:

Dim Result as Long
result=FTP_Upload_File(sheet_name & ".csv", sheet_name & ".csv", Server, User, Passwort)

Server, User und Passwort musst Du natürlich mit den passenden Daten programmieren - die kenn ich ja nicht Wink



In der Funktion dann eventuell noch die Sache mit em cd und lcd, schaue aber erst mal, was mit dem Aufruf passiert ...
Im Saveas dialogbox gibt es Raum für FTP sites.

Dann kannst du speichern wie z.B.

PHP-Code:
Thisworkbook.saveas ftp://www.snb.vba.eu/bestanden/beispiel.csv", xlCSVUTF8