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-Key: 665936

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

Printed on: April 23, 2024 at 17:04 o'clock

Member: Ghent74
Ghent74 Apr 20, 2021 updated at 12:16:22 (UTC)
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 ...
Member: xenonblue
xenonblue Apr 20, 2021 at 12:18:49 (UTC)
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
Member: Ghent74
Ghent74 Apr 20, 2021 at 12:29:50 (UTC)
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.
Member: Ghent74
Solution Ghent74 Apr 20, 2021 at 12:37:29 (UTC)
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
Member: xenonblue
xenonblue Apr 20, 2021 at 14:06:03 (UTC)
Goto Top
@Ghent74

absolut genial.... Vielen, vielen Dank.

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

Perfekt...

Viele Grüße
xenon
Mitglied: 148121
148121 Apr 20, 2021 updated at 14:42:46 (UTC)
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.