VBA - "Speichern unter" im Sharepoint mit Pfad-Vorgabe

duAffentier

Vice Admiral
Registriert
Jan. 2008
Beiträge
6.351
Hallo,

ich stehe vor einem kleinen Problem. Ich muss eine Datei im Sharepoint speichern, und möchte direkt zu einem Ziel-Ordner springen, um dann dort entsprechend den finalen Ordner zu suchen.

Ich hab ein "Speichern unter" Makro.
Funktion:
- Dateiname wird aus Zelle genommen (sehr langer Dateiname nach einem vorgegebenen Muster)
zusätzlich:
- der Zielpfad "https" des Sharepoint-Projektes ist schon in einer Zelle vorgegeben (dieser setzt sich aus mehreren Variablen zusammen - daraus ergibt sich der Ziel-Pfad).

Mein Wunsch:
Wenn das Makro startet, soll es gleich den https-Pfad nehmen und mir diesen Ordner anzeigen. Damit ich dann den finalen Ordner suchen kann.
Der Dateiname sollte auch schon drin stehen.

Aktueller Code:

Code:
Sub SpeichernUnter()
    Dim Datei As String
    Dim Verzeichnis As String
  
    Verzeichnis = ("Z:\") 'Verzeichnis-Vorschlag
    Datei = Tabelle4.Cells(2, 4).Value & ".xlsm" 'Datei-Vorschlag
    VBA.ChDrive Verzeichnis
    If Application.Dialogs(xlDialogSaveAs).Show(Verzeichnis & Datei, 52) = False Then 'Dateinr. 52 ist xlsm
      MsgBox "Datei - nicht gespeichert"
    Else
      MsgBox "Datei - gespeichert"
    End If
End Sub

Tabelle4.Cells(2, 4) <-- Hier steht der Dateiname (aus Formel zusammengesetzt)
Tabelle4.Cells(1, 4) <-- Hier steht der https-Pfad (aus Formel zusammengesetzt)

Hinweis:
Ich kann bei "Dateiname" ja den Pfad manuell hinein kopieren und bin dann im Sharepoint-Ordner drin. Das möchte ich aber wegfallen lassen. Da nicht jeder Mitarbeiter so IT-Bewandt ist, um das zu machen.
Aktuell lasse ich mir daher nur den Namen der Datei vorgeben und füge dann mittels "Strg+V" den https-Pfad ein, der Dialog springt in den Sharepoint und dann steht der Dateiname ja noch da. Das soll aber automatisch sein. Sprich gleich im Ziel-Ordner sein um dort zu navigieren.
 
eine kurze Onlinesuche ergibt
https://software-solutions-online.com/excel-vba-save-file-dialog-getsaveasfilename/

Example5 ist, was du suchst.
Code:
Sub Example5()
Dim varResult As Variant
'displays the save file dialog
varResult = Application.GetSaveAsFilename(FileFilter:= _
"Excel Files (*.xlsx), *.xlsx, Macro Enabled Workbook" & _
"(*.xlsm), *xlsm", Title:="Some Random Title", _
InitialFileName:="D:TempFolder to Start")
'checks to make sure the user hasn't canceled the dialog
If varResult <> False Then
Cells(2, 1) = varResult
End If
End Sub

in Zeile 7 musst du deinen Pfad hinterlegen (InitialFileName). Lokal auf meinem PC klappt es gut. Ob es mit Sharepoint geht kann ich nicht testen :)
C:\Users\<name>\Desktop\Neuer Ordner\test1.xlsx führt in meinem Fall zu Öffnen der Dialogbox mit dem Pfad bis zum "Neuer Ordner", als Dateiname ist "test1.xlsx" voreingetragen.

Beachte:
Die IF-Prüfung führt im Falle des "Speichern"s nur dazu, dass in Celle A2 der Dateipfad/Dateiname eingetragen wird. zum tatsächlichen Speichern braucht es noch
Code:
 ActiveWorkbook.SaveAs varResult


Gruß
 
  • Gefällt mir
Reaktionen: duAffentier
Ich würde der Einfachheit halber das übergeordnete Sharepoint-Verzeichnis als Laufwerksbuchstabe/Netzlaufwerk einbinden. Den Laufwerksbuchstaben verwendest Du dann im script.

Sharepoint bietet zumindest beim Zugriff mit dem IE die Möglichkeit einen Sharepoint-Ordner im Windows-Dateiexplorer anzuzeigen. Damit erhältstt Du den Dateipfad.

Immer vorausgesetzt, der Sharepoint-Server liegt in Deinem Netzwerk...
 
@Demon_666

Ich würde der Einfachheit halber das übergeordnete Sharepoint-Verzeichnis als Laufwerksbuchstabe/Netzlaufwerk einbinden. Den Laufwerksbuchstaben verwendest Du dann im script.
Wir haben hunderte Sharepoints - Daher kann ich im System kein Netzlaufwerk verbinden. Da es an mehreren Rechnern genutzt wird.

Sharepoint bietet zumindest beim Zugriff mit dem IE die Möglichkeit einen Sharepoint-Ordner im Windows-Dateiexplorer anzuzeigen. Damit erhältstt Du den Dateipfad.
Über Webdavv habe ich das am PC - Ja. Ist aber nur eine temp. Lösung. Das wird es bald nicht mehr geben!

Der Sharepoint liegt im FirmenNetzwerk bei MS ;) Ist halt Office365.
 
Danke. Werde das mir anschauen und im anderen Forum weiter besprechen. Aber die Lösung sieht erst mal nach einem Weg aus. Das teste ich.
Es geht. Der Sharepoint ist ausgewählt. Nun noch den Dateinamen vorgeben und dann ist es fertig.
Auf die Idee mit dem InitialFileName bin ich noch nicht gestoßen.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: spcqike
Hallo,

anbei die Lösung, welche mit aus dem Office-Forum stammt.

Code:
Sub SpeichernUnterGesamt()
  Dim varFullname As Variant
  Dim varResult As Variant
 
  varFullname = Tabelle4.Cells(3, 4).Value
  varResult = Application.GetSaveAsFilename( _
      FileFilter:="Macro Enabled Workbook (*.xlsm), *.xlsm", _
      Title:="Some Random Title", _
      InitialFileName:=varFullname)
 
  If varResult <> False Then
    Tabelle4.Cells(2, 4).Value = varResult
  End If
End Sub

Ich habe dann die Zelle D1 (Pfad) und D2 (Dateiname) in Zelle D3 zusammengeführt.
=D1&D2&".xlsm"
 
Hallo,

nun habe ich das Problem, das er beim "speichern" die Datei nicht speichert. Woran liegt denn das?
Ergänzung ()

Ich habe SFilename nun benutzt. Nun speichert er es.

Ist das richtig so, oder habe ich hier noch Fehler?

Code:
Sub SpeichernUnterGesamt()
  Dim varFullname As Variant
  Dim sFilename As String
 
  varFullname = Tabelle4.Cells(3, 4).Value
  sFilename = Application.GetSaveAsFilename( _
      FileFilter:="Macro Enabled Workbook (*.xlsm), *.xlsm", _
      Title:=Tabelle4.Cells(85, 1).Value, _
      InitialFileName:=varFullname)
 
        If sFilename <> "False" Then
        ActiveWorkbook.SaveAs sFilename
        End If
End Sub
 
Zuletzt bearbeitet:
Zurück
Oben