hummel85
Goto Top

Ganze tabelle in .csv Speichern.

Hallo.

Ich würde gern meine Exceldatei(*.xls) in *.csv speichern. Das Problem ist nur das ich nicht die ganze Datei speichern kann sondern nur die einzelnen Tabellenblätter. Da ich aber keine Lust habe die ganzen Tabellenblätter einzeln zu speichern würde ich das gerne so machen.

Also jetzt mal zur Frage gibt es eine Möglichkeit das so zu speichern wenn nicht geht das über ein Makro? Wenn ja wie würde das Makro aussehen?

Content-ID: 37551

Url: https://administrator.de/contentid/37551

Ausgedruckt am: 25.11.2024 um 07:11 Uhr

16568
16568 10.08.2006 um 12:48:09 Uhr
Goto Top
Du hast es schon erkannt, das ganze geht nur über ein Makro.
Tabellenblätter auslesen, jedes als Objekt deklarieren, als CSV speichern, feddisch face-wink


Lonesome Walker
8644
8644 10.08.2006 um 13:08:54 Uhr
Goto Top
Hi,

versuchs mal so:

Sub speichern_als()
 Dim I_Sheets As Integer
 Dim F_Name As String
 
  For I_Sheets = 1 To Sheets.Count
   F_Name = "E:\Daten\" + Sheets(I_Sheets).Name + ".csv"  
   Sheets(I_Sheets).SaveAs Filename:=F_Name, FileFormat:= _
   xlCSV, CreateBackup:=False
  Next I_Sheets
End Sub

Psycho
Hummel85
Hummel85 14.08.2006 um 11:26:11 Uhr
Goto Top
Vielen dank schon mal für die antworten.

Aber hier sind noch ein paar fragen offen.

1. In deine Makro Psycho Dad, steht F_Name = "E:\Daten\" bei mir existiert dieser Pfad aber nicht da E mein DVD-Laufwerk ist. Oder ist das egal? muss ich noch andere Anpassungen vornehmen?

2. wo schreibe ich die Makros rein? und vor allem wie führe ich das Makro dann aus?

3. Bekomm ich bei dem Makro eine art Menü wo ich auswählen kann wo die .csv gespeichert werden soll?

Vielen dank schon ein mal im voraus.
8644
8644 14.08.2006 um 11:52:29 Uhr
Goto Top
Moin,

die Pfadangabe muss natürlich angepasst werden. Das ginge evtl. mit einer InputBox:

Sub speichern_als()
Dim I_Sheets As Integer
 Dim F_Name As String
 Dim F_Path As String
 F_Path = Application.InputBox("Pfad angeben")  
  For I_Sheets = 1 To Sheets.Count
   F_Name = F_Path + Sheets(I_Sheets).Name + ".csv"  
   Sheets(I_Sheets).SaveAs Filename:=F_Name, FileFormat:= _
   xlCSV, CreateBackup:=False
  Next I_Sheets
End Sub

Einbinden geht folgendermassen:

Menü Extras -> Makro -> Makros -> hier den Namen Eingeben speichern_als -> Erstellen

jetzt hast du den VBA-Editor vor dir und der Teil

Sub speichern_als()
End Sub 

steht schon da. Den Rest kopierst du dann rein!
Zum Aufrufen kannst du eine Tastenkombination vergeben oder du positionerst eine Autoform (Symbolleiste Zeichnen) auf dem Blatt und weist dann über das Kontextmenü (rechte Maustaste) das entsprechende Makro zu.

Psycho
Hummel85
Hummel85 15.08.2006 um 07:52:07 Uhr
Goto Top
Guten Morgen Psycho Dad,

danke für die Antwort. Aber jetzt kommt mein Problem vom 1. mal wieder. Ich möchte alle Tabellenblätter in einer .csv haben. Geht das auch oder muss ich das von Hand kopieren?
Das was ich bis jetzt habe ist auf jeden fall schon mal ein Riesen fortschritt. Und was ich jetzt noch endeckt habe. Wenn ich bei der InputBox auf Abbrechen drücke legt das Makro mir die .csv Dateien einfach in Eigene Dateien. Kann ich da nicht sagen dass das ganze Makro beendet wird?

Und noch eine Excel frage, wie kann ich Makros in jeder Excel Tabelle verfügbar machen ohne das ich das immer in die Tabelle kopieren muss?

Have a nice day

Sebastian
8644
8644 15.08.2006 um 10:05:31 Uhr
Goto Top
Moin,

also erstmal zur Problematik des Zusammenführens (hast du vorher nicht erwähnt!).
Ich habe mal vorausgesetzt, dass die Tabellen gleich aufgebaut sind.
Hier wird eine temporäre Tabelle erstellt, in der die Werte aus allen Blättern zusammengefasst werden. Diese wird dann als *.csv gespeichert. Das Blatt wird hinterher wieder gelöscht.

Sub zusammenfuehren_speichern()
    Dim I_Sheets As Integer        ' Anzahl der Blätter  
    Dim F_Name As String           ' Pfad und Dateiname  
    
    F_Name = InputBox("Pfad und Dateinamen angeben") ' Hier kompletten Pfad und Namen angeben!  
    ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count) ' Temporäre Tabelle erstellen  
                                                                 ' und ans Ende setzen  
    For I_Sheets = 1 To Sheets.Count - 1   ' Zählschleife für Anzahl der Blätter  
                                           ' ohne das neu Erstellte  
    
     Sheets(I_Sheets).Select               ' Tabellenblatt wählen  
     If I_Sheets = 1 Then Range("A1").Select Else Range("A2").Select ' Im ersten Blatt  
                                                                     ' den Kopf mit kopieren  
     Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select    ' Tabelle bis zu letzten Zelle  
                                                                     ' markieren, die Wert enthält  
     Selection.Copy                        ' Alles in Zwischenablage kopieren  
     Sheets(Sheets.Count).Select           ' Temporäre Tabelle wählen  
     If I_Sheets = 1 Then Range("A1").Select Else Range("A65536").End(xlUp).Offset(1, 0).Select  
                                           ' Ende der Tabelle suchen  
     ActiveSheet.Paste                     ' Werte einfügen  
     
    Next I_Sheets                          ' Ende der Zählschleife  
    ActiveWorkbook.SaveAs Filename:=F_Name, FileFormat:=xlCSV _
        , CreateBackup:=False              ' Temporäre Tabelle als *.csv speichern  
    
    ActiveWindow.SelectedSheets.Delete     ' Temporäre Tabelle wieder löschen  
End Sub

Über die anderen Fragen muss ich noch nachdenken - bin auch kein Experte!

Psycho
Hummel85
Hummel85 15.08.2006 um 10:21:12 Uhr
Goto Top
Vielen dank Psycho Dad.

Ich habe mich wahrscheinlich in der eigentlichen Frage ein wenig bescheiden ausgedrückt aber nun ist ja alles so wie es sein soll.

Wenn du oder ein anderer User eine Idee hat wie ich das machen kann.

Das dieses Makro in allen Excel Tabellen verfügbar ist( also in der art wie ein Template).
Und wenn ich die InputBox Abbrechen drücke das das Makro sich auch Beendet.

Vielen dank schon einmal im Voraus.
8644
8644 15.08.2006 um 10:29:12 Uhr
Goto Top
Hi,

hier wird erklärt, wie man Makros global verfügbar macht.

[Edit: Gib mal unter der InputBox-Zeile noch folgendes ein:
If F_Name = "" Then Exit Sub  
]

Psycho
Hummel85
Hummel85 15.08.2006 um 11:02:48 Uhr
Goto Top
Hi,

vielen dank nochmal hat alles wunderbar funktioniert.

Also wünsche ich dir noch einen schönen Tag.
Hummel85
Hummel85 15.08.2006 um 11:02:50 Uhr
Goto Top
8644
8644 15.08.2006 um 11:10:54 Uhr
Goto Top
...kein Thema! Setzt aber bitte den Beitrag auf "Gelöst"

und dir auch noch einen schönen Tag!

Psycho