xenonblue
Goto Top

Ganze tabelle in .csv Speichern

Hallo,

ich nutze den VBA Code, der hier besprochen wurde, um aus einer Tabelle mit verschiedenen Blättern einzelne .csv Dateien zu erzeugen.

Funktioniert reibungslos...
Nur wenn ich Abbrechen drücke, dann kommt der Fehler "Typen unverträglich"...
Wenn ich hingegen nichts eingebe und nur OK drücke endet das Makro wie gewünscht.

Ich habe alles probiert (was das Netz zur Verfügung stellt), komme aber mit dieser Application.Inputbox nicht weiter...
Mit einer normalen Inputbox funktioniert zwar das Abbrechen, aber der Rest geht dann nicht mehr

Hier nochmal mein Code:

Sub speichern_als()
Dim I_Sheets As Integer
Dim F_Name As String
Dim F_Path As String
F_Path = Application.InputBox("Pfad angeben")  
If F_Name = "" Then Exit Sub  
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

Was muss ich anpassen? Der Code arbeitet so perfekt nur das ist unschön, weil die Tabelle verschiedene Nutzer haben soll und ich eine Fehlermeldung dann unpassend finde.

Vielen Dank
VG
xenon

Content-ID: 665936

Url: https://administrator.de/forum/ganze-tabelle-in-csv-speichern-665936.html

Ausgedruckt am: 06.04.2025 um 06:04 Uhr

Ghent74
Ghent74 20.04.2021 aktualisiert um 14:16:22 Uhr
Goto Top
Versuch mal:

Dim F_Name As String = ""

Du dimensionierst zwar das String es sollte aber faktisch noch NULL sein, damit erzeugst du dann eine Unverträglichkeit.

EDIT:
Blödsinn, hab' eben nicht genau hingeschaut.
Warum machst du das hier:
If F_Name = "" Then Exit Sub
F_Name wurde bis dahin doch noch gar nicht gesetzt.
Du fragst F_Path in der Inputbox ab.

Und du solltest
F_Path = Application.InputBox(prompt := "Pfad angeben", type := 2)
schreiben, damit klar ist, dass ein Text erwartet wird.

https://docs.microsoft.com/de-de/office/vba/api/excel.application.inputb ...
xenonblue
xenonblue 20.04.2021 um 14:18:49 Uhr
Goto Top
Hallo,

danke für deine Antwort...!

Ich habe es einfach nur aus dem benannten Betrag kopiert.

Aber (dachte ich mir nämlich auch - nach meinem laienhaften Verständnis)

If F_Path = "" Then Exit Sub

habe ich auch schon probiert, selbes Ergebnis.

Dim F_Name As String = ""

an welcher Stelle im Code soll ich das einfügen?

VG
Ghent74
Ghent74 20.04.2021 um 14:29:50 Uhr
Goto Top
Ganz oben, wo du es ja schon hast:

Dim F_Name As String = ""
Dim F_Path As String = ""

Damit du, wenn du abbrechen drückst, zumindest die Variable gefüllt hast.
Dann sollte

If F_Path = "" Then Exit Sub

zumindest die Funktion abbrechen.

Unterm Strich ist das aber alles unschön, denn du bist von einer korrekten Eingabe abhängig.
Du hast keinerlei Prüfung, ob der Pfad korrekt ist.
Ghent74
Lösung Ghent74 20.04.2021 um 14:37:29 Uhr
Goto Top
Besser wäre:

Dim F_Path As String
    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = "C:\"  
        .Title = "Ordnerauswahl"  
        .ButtonName = "Auswahl..."  
        .InitialView = msoFileDialogViewList
        If .Show = -1 Then
            F_Path = .SelectedItems(1)
            If Right(F_Path , 1) <> "\" Then F_Path = F_Path & "\"  
          Else
            F_Path = ""  
        End If
    End With
    If F_Path = "" Then   
       MsgBox ("Kein Ordner gewählt!")   
       Exit Sub
    End If
xenonblue
xenonblue 20.04.2021 um 16:06:03 Uhr
Goto Top
@Ghent74

absolut genial.... Vielen, vielen Dank.

Das ist jetzt 1000x besser als ich es haben wollte...

Perfekt...

Viele Grüße
xenon
148121
148121 20.04.2021 aktualisiert um 16:42:46 Uhr
Goto Top
Nur noch nachträglich zur Info falls es noch interessiert:
Das Ergebnis einer InputBox ist False wenn auf Abbrechen geklickt wird, kein leerer String face-wink

Gruß w.