joerg18470
Goto Top

Mit VBA einen Speicherpfad aus Auswahlfenster definieren (EXCEL)

Hallo zusammen,
Ich habe in einer Tabelle einen Speicherbutton eingebaut und möchte noch ein Auswahlfenster für diesen einrichten.

Das ganze stelle ich mir so vor das ich einen Speicherpfad in einer der Excelzellen hinterlege, an den dann auch der Speicherbutton die Tabelle speichert. Zur Zeit ist es so das ich in dem Button einen festen Pfad eingetragen habe, jetzt möchte ein Kollege von mir auch diese Tabelle und er soll sich dann seinen Pfad via Auswahlfenster in einer Zelle eintragen können, da ja jeder andere Pfade zum speichern nutzen möchte. Wie könnte man das dann so bewerkstelligen ?

Content-ID: 191655

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

Ausgedruckt am: 22.11.2024 um 15:11 Uhr

bastla
bastla 22.09.2012 aktualisiert um 11:53:14 Uhr
Goto Top
Hallo Joerg18470!

Wozu soll das Auswahlfenster gut sein - wenn ohnehin der Pfad in einer Zelle stehen soll, kann er dort doch auch einfach manuell eingetragen werden ...

... ansonsten:
Pfad = Application.GetSaveAsFilename
If Pfad <> "Falsch" Then Range("C4").Value = Pfad  
Grüße
bastla

P.S.: Falls das noch nicht genügt, solltest Du die Frage als "nicht gelöst" markieren ...
Joerg18470
Joerg18470 22.09.2012 um 12:13:40 Uhr
Goto Top
[Code]
Sub MappeSpeichern()
MsgBox "C:\Users\Joerg\Documents\Stunden " & FileNameToken & ".xlsm"
ActiveWorkbook.SaveAs Filename:="C:\Users\Joerg\Documents\Stunden " & FileNameToken & ".xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
[/code]
Anstatt dieses fest eingetragenen Pfads möchte ich gern das man sich irgendwo seinen persönlichen Pfad auswählen kann der dann in diesem Code anstatt des festen Pfades genommen wird. Sicher kann man den Pfad auch manuell in einer Zelle eingeben. Ich dachte aber das es komfortabler ist wenn man sich diesen in einer Zelle auswählen kann. Via Hyperlink Eintrag sollte es natürlich auch funktionieren das da der richtige Pfad drin steht, nur muß dieser dann auch vom oben stehenden Code übernommen werden.
bastla
bastla 22.09.2012 um 15:52:36 Uhr
Goto Top
Hallo Joerg18470!

Um tatsächlich nur einen Pfad auszuwählen und in einer Zelle zu hinterlegen etwa so:
Sub PfadFestlegen()
Set Fld = CreateObject("Shell.Application").BrowseForFolder(0, "Datei oder Verzeichnis wõhlen", 16, 17)  
If Not TypeName(Fld) = "Nothing" Then  
    Pfad = Fld.Self.Path
End If
Range("C4").Value = Pfad  
Verwenden kannst Du den Pfad dann so:
Sub MappeSpeichern()
Pfad = Range("C4").Value  
If Pfad <> "" Then  
    ActiveWorkbook.SaveAs Filename:=Pfad & FileNameToken & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False  
Else
    MsgBox "Es wurde noch kein Pfad festgelegt!"  
End If
End Sub
Grüße
bastla
Joerg18470
Joerg18470 23.09.2012 um 11:21:06 Uhr
Goto Top
Hallöchen,
mit dem Pfad festlegen das geht schon erst mal prima, nur mit dem speichern harpert da noch was. Die Datei lässt sich nicht finden, aber wenn ich nochmals speichern klicke bekomme ich die Antwort das die Datei schon vorhanden ist. Ich habe schon alle möglichen Anzeigeoptionen versucht nur kann ich diese nicht finden. Denke da habe ich noch was falsch gemacht.Was bedeutet eigentlich die 16,17 bei dir unter Verzeichnis auswählen ? Habe mir jetzt ein Buch gekauft "Einstieg in VBA mit EXCEL" von Thomas Theis nur habe ich da eine solche Deklaration noch nicht gefunden.
Joerg18470
Joerg18470 23.09.2012 um 11:35:26 Uhr
Goto Top
Habe die Datei gefunden und denke mal somit auch den Fehler, er speichert bei einem ausgesuchten Pfad :

D:\Joerg\Desktop

eine Datei unter D:\Joerg mit dem Namen DesktopSeptember.xlsm

so müßte ich doch nur noch irgendwo eine Trennung rein machen das er den z.B Desktop noch zum Pfad nimmt und nicht schon als Namen der Datei. Da kann doch nur irgendwo noch ein Kürzel fehlen.
Trotzdem erstmal schon vielen Dank bis hierher, du hast mir schon sehr viel geholfen... DANKE !!!
Joerg18470
Joerg18470 23.09.2012 um 11:52:20 Uhr
Goto Top
Wenn ich den Pfad per Hand einfüge und nach dem Desktop noch den Bachslash anhänge funktioniert das ganze wirklich prima.
Joerg18470
Joerg18470 23.09.2012 um 12:05:46 Uhr
Goto Top
So habe es hinbekommen. Habe in diesem Fall bei der Namensdeklaration nur noch den Bakslash hinzufügen lassen und es geht prächtig, hier der gesamte Code nochmal komplett für Mappe speichern:

[QUOTE]
Sub MappeSpeichern()
Pfad = Range("G7").Value & "\"
MsgBox Pfad & FileNameToken & ".xlsm"
If Pfad <> "" Then
ActiveWorkbook.SaveAs Filename:=Pfad & FileNameToken & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Else
MsgBox "Es wurde noch kein Pfad festgelegt!"
End If

End Sub


Private Function FileNameToken() As String

Dim i As Integer
With ThisWorkbook
For i = 2 To 13
If .Sheets(i).Cells(40, 3).Value = 0 Then
If i = 1 Then
FileNameToken = .Sheets(i).Name
FileNameToken = "Keiner"
Exit Function
Else
FileNameToken = .Sheets(i - 1).Name
Exit Function
End If
End If
Next i
End With
End Function
[/QUOTE]

Mit welchem Befehl hast du eine solch schöne Codeauflistung hier eingefügt ?
Danke nochmal und somit betrachte ich diesen Thread als gelöst !!!
76109
76109 23.09.2012 aktualisiert um 12:13:08 Uhr
Goto Top
Hallo Joerg18470!

Yepp, in etwa so:
If Not TypeName(Fld) = "Nothing" Then  
    Pfad = Fld.Self.Path & "\"  
End If

Gruß Dieter

PS. In Deinem letzten Code ist der Backslash an der falschen Stelle plaziert. Der Test mit 'If Pfad <> "" Then..' funktioniert dann nicht mehr, weil im Fehlerfall der Pafd "\" lauten würde.
Joerg18470
Joerg18470 23.09.2012 um 13:15:20 Uhr
Goto Top
> If Not TypeName(Fld) = "Nothing" Then  
>     Pfad = Fld.Self.Path & "\"  
> End If
> 

Du hast Recht !
Wenn ich jetzt deinen Code versuche bricht der bei " Pfad = Fld.Self.Path & "\" " mit Laufzeitfehler ab. Objekt ist erforderlich.
Kann es sein das der Befehl objFolder.Self.Path heißen müßte ?
Joerg18470
Joerg18470 23.09.2012 aktualisiert um 13:49:47 Uhr
Goto Top
Sorry Dieter,
hatte nur die falschen Füßchen face-smile

Alles in Butter und nochmal Danke Euch beiden

Gruß Jörg
bastla
bastla 23.09.2012 aktualisiert um 13:30:04 Uhr
Goto Top
Hallo Joerg18470!

Das Objekt "Fld" wird in der Zeile
Set Fld = CreateObject("Shell.Application").BrowseForFolder(0, "Datei oder Verzeichnis wõhlen", 16, 17)
erzeugt - wenn es diese Zeile gibt, sollte es auch das Objekt geben ...

Grüße
bastla

[Edit] Hatte Deinen letzten Kommentar noch nicht gesehen ... [/Edit]