Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Lokaler Pfad einer Sharepoint Datei

Forumthread: Lokaler Pfad einer Sharepoint Datei

Lokaler Pfad einer Sharepoint Datei
14.03.2022 10:09:33
Frank
Hallo allerseits,
wie kann ich denn bei einer Excel-Datei den lokalen Speicherort einer mit Sharepoint synchronisierten Datei auslesen?
Ich habe jetzt schon sowohl das Forum, als auch Google durchsucht, finde aber nichts passendes.
Konkretes Beispiel:
Dim strPath As String
strPath = ActiveWorkbook.FullName [da wird dann "https://xxx.sharepoint.com/xxx" eingelesen]
ActiveWorkbook.SaveAs Filename:=strPath & "x" _
, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
Kill strPath
Komischerweise funktioniert
ActiveWorkbook.SaveAs Filename:=strPath einwandfrei, die Fehlermeldung kommt bei Kill strPath "Laufzeitfehler '53': Datei nicht gefunden"
Mit Replace kann ich leider nicht arbeiten, da wir in der Firma sehr viele Sharepoints haben und das Makro auch bei mehreren Usern funktionieren soll.
Vielen Dank im Voraus!
Grüße
Franky
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Lokaler Pfad einer Sharepoint Datei
14.03.2022 10:49:37
Frank
Hallo Chris,
das bringt mich leider nicht weiter, da wir keinen ftp-Zugang haben. Der zweite Link bringt mir auch nichts, da der Pfad jedesmal anders ist. Ich bräuchte tatsächlich eine Methode, wie ich strPath = ActiveWorkbook.FullName anpasse, um den lokalen Pfad anzugeben.
Grüße
Franky
Anzeige
AW: Lokaler Pfad einer Sharepoint Datei
14.03.2022 11:02:02
ChrisL
Hi Franky
Ich denke das Problem ist, dass Kill in Zusammenhang mit Sharepoint nicht funktioniert. Der erste Link enthält u.a. den Vorschlag, Sharepoint als Netzwerkressource (ich nehme an dies ergibt einen neuen Laufwerks-Buchstabe) einzurichten und mit dem zweiten Link kann man auch einen variablen Dateipfad ansprechen.
cu
Chris
Anzeige
AW: Lokaler Pfad einer Sharepoint Datei
14.03.2022 11:51:52
Frank
Hallo Chris,
ja, das vermute ich ich auch (Kill).Als Netzwerkressource einbinden geht in diesem Fall wegen der Menge der verschiedenen Sharepoints nicht. Das mit dem Variablen Dateipfad ist klar, aber den muss ich halt vorher irgendwie auslesen. Das Ganze muss idiotensicher sein, wenn ich da von einigen Usern verlange, den Dateipfad einzugeben, geht das leider in die Hose.
Grüße
Franky
Anzeige
AW: Lokaler Pfad einer Sharepoint Datei
14.03.2022 11:07:05
UweD
ungetestet..
strPath = ActiveWorkbook.Path
LG UweD
AW: Lokaler Pfad einer Sharepoint Datei
14.03.2022 11:48:59
Frank
Hallo Uwe,
leider nein, das gibt mir auch nur den Sharepoint-Pfad zurück.
Grüße
Franky
AW: Lokaler Pfad einer Sharepoint Datei
14.03.2022 11:52:08
UweD
Hi
wenn du das mit F5 im Einzelschritt durchgehst und nach dem Save mal was wartest... geht der Kill dann?
Wenn Ja, einen Wait dazwischen einfügen
LG UweD
Anzeige
AW: Lokaler Pfad einer Sharepoint Datei
14.03.2022 12:18:03
Frank
Leider nein.
Grüße
Franky
AW: Lokaler Pfad einer Sharepoint Datei
14.03.2022 13:40:30
UweD
Hallo nochmal
Versuch es mal mit FSO

Dim strPath As String
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
strPath = ActiveWorkbook.FullName ' [da wird dann "https://xxx.sharepoint.com/xxx" eingelesen]
ActiveWorkbook.SaveAs Filename:=strPath & "x" _
, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
FSO.DeleteFile strPath
LG UweD
Anzeige
AW: Lokaler Pfad einer Sharepoint Datei
16.03.2022 06:15:01
Frank
Hi Uwe,
sorry für die späte Antwort, bin erst jetzt zum Testen gekommen.
Das funktioniert leider auch nicht, hier gibt es "Laufzeitfehler '52': Dateiname oder -nummer flasch".
Grüße
Franky
AW: Lokaler Pfad einer Sharepoint Datei
16.03.2022 08:15:15
UweD
Dann bin ich raus
offen!
Lokaler Pfad einer Sharepoint Datei
18.03.2022 09:39:17
Anton
Hallo Frank,
probier es hiermit (ungetestet mangels Sharepoint zuhause):

Sub sharepoint_verbinden()
  Dim objNetzwerk As Object, fso As Object, strPath As String, strNameNeu As String    
  Dim strName As String, strBenutzername As String, strPasswort As String  
  Set objNetzwerk = CreateObject("WScript.Network")  
  Set fso = CreateObject("Scripting.FileSystemObject")  
 '  strBenutzername = "Benutzername"
 '  strPasswort = "Passwort"
  strPath = ActiveWorkbook.Path
  strName = ActiveWorkbook.Name
  strNameNeu = Replace(ActiveWorkbook.FullName, strName, "Neu_" & strName) 'anpassen
  ActiveWorkbook.SaveAs Filename:=strNameNeu, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False    
  If Not fso.DriveExists("B") Then  
    On Error Resume Next    
   'sharepointordner strPath verbinden
    objNetzwerk.MapNetworkDrive "B:", strPath ', , strBenutzername, strPasswort
    If Err.Number <> 0 Then  
      MsgBox Err.Description, vbCritical, "Fehler bei Verbindung!"
    Else
      Kill "B:\" & strName
      Call trennen
    End If  
  Else
    Call trennen
  End If  
  Set fso = Nothing  
  Set objNetzwerk = Nothing  
End Sub  
Function trennen()
  Dim win As Object  
 'Explorerfenster, falls geöffnet, schliessen
  For Each win In CreateObject("Shell.Application").Windows    
    If InStr(1, UCase(win.FullName), "EXPLORER.EXE") > 0 Then    
      If InStr(1, UCase(win.LocationURL), "B:") <> 0 Then win.Quit    
    End If  
  Next
 'sharepoint trennen
  Application.Wait (Now + TimeValue("0:00:02")) '2 Sekunden Pause
  CreateObject("WScript.Network").RemoveNetworkDrive "B:"
End Function  

mfg Anton
Anzeige
AW: Lokaler Pfad einer Sharepoint Datei
18.03.2022 13:40:38
Frank
Hallo Anton,
das würde schon daran scheitern, dass jeder User seinen Benutzernamen und Passwort im Code eintragen müsste. Letzteres ändert sich auch noch zwangsweise alle 90 Tage. Das könnte ich zwar auch durch eine Usereingabe abfrühstücken, da wird das Passwort dann aber ungeschützt eingetragen, was unsere IT sicher nicht freuen wird. Außerdem hat irgendjemand sicher auch B (und jeden anderen Buchstaben) bereits als Laufwerksbuchstabe vergeben, das könnte ich also auch nicht hartcodiert lassen, oder müsste im Code einen Buchstaben nach dem anderen abfragen.
Das kann doch nicht sein, dass MS es einem so schwer macht, eine versch****** Datei zu löschen, bzw. deren lokalen Pfad auszulesen.
Trotzdem Danke!
Grüße
Franky
Anzeige
AW: Lokaler Pfad einer Sharepoint Datei
18.03.2022 15:01:52
Anton
Hallo Frank,
jeder User seinen Benutzernamen und Passwort im Code eintragen müsste.
ist vielleicht gar nicht nötig, weil diese Angaben optional sind.
müsste im Code einen Buchstaben nach dem anderen abfragen.
ist auch nicht so ein großes Problem:

Sub sharepoint_verbinden()
  Dim objNetzwerk As Object, fso As Object, win As Object, strPath As String    
  Dim strName As String, strNameNeu As String, strFrei As String  
  Set objNetzwerk = CreateObject("WScript.Network")  
  Set fso = CreateObject("Scripting.FileSystemObject")  
  strPath = ActiveWorkbook.Path
  strName = ActiveWorkbook.Name
  strNameNeu = Replace(ActiveWorkbook.FullName, strName, "Neu_" & strName) 'anpassen
  ActiveWorkbook.SaveAs Filename:=strNameNeu, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False    
  For i = 65 To 90  
    If Not fso.DriveExists(Chr(i)) Then  
      strFrei = Chr(i) & ":"
      Exit For  
    End If  
  Next
  On Error Resume Next    
 'sharepointordner strPath verbinden
  objNetzwerk.MapNetworkDrive strFrei, strPath
  If Err.Number <> 0 Then  
    MsgBox Err.Description, vbCritical, "Fehler bei Verbindung!"
  Else
    Kill strFrei & "\" & strName
   'Explorerfenster, falls geöffnet, schliessen
    For Each win In CreateObject("Shell.Application").Windows    
      If InStr(1, UCase(win.FullName), "EXPLORER.EXE") > 0 Then    
        If InStr(1, UCase(win.LocationURL), strFrei) <> 0 Then win.Quit    
      End If  
    Next
   'sharepoint trennen
    Application.Wait (Now + TimeValue("0:00:02")) '2 Sekunden Pause
    CreateObject("WScript.Network").RemoveNetworkDrive strFrei
  End If  
  Set fso = Nothing  
  Set objNetzwerk = Nothing  
End Sub  

mfg Anton
PS: Probier es einfach aus, vielleicht funktioniert es doch :-)
Anzeige
@zechfr Test oT
21.03.2022 20:51:09
Anton
;
Anzeige

Infobox / Tutorial

Lokaler Pfad einer Sharepoint Datei auslesen


Schritt-für-Schritt-Anleitung

Um den lokalen Pfad einer mit Sharepoint synchronisierten Datei auszulesen, kannst Du folgenden VBA-Code verwenden. Dieser Code hilft Dir, den Sharepoint Dateipfad anzuzeigen und die Datei lokal zu speichern.

Sub LocalSharePointPath()
    Dim strPath As String
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")

    ' Hole den Sharepoint Pfad
    strPath = ActiveWorkbook.FullName ' Hier wird der Sharepoint-Pfad eingelesen

    ' Speichere die Datei lokal
    ActiveWorkbook.SaveAs Filename:=strPath & "x", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

    ' Lösche die Datei (hier muss der lokale Pfad angegeben werden)
    FSO.DeleteFile strPath
End Sub

Dieser Code speichert die Datei und versucht dann, sie zu löschen. Achte darauf, dass der Pfad korrekt ist, um Laufzeitfehler 53 zu vermeiden.


Häufige Fehler und Lösungen

  • Laufzeitfehler 53: Datei nicht gefunden
    Dieser Fehler tritt auf, wenn der Pfad nicht korrekt angegeben ist. Stelle sicher, dass Du den Sharepoint Link auf die lokale Datei anpasst.

  • Laufzeitfehler 52: Dateiname oder -nummer falsch
    Dieser Fehler kann auftreten, wenn Du versuchst, eine Datei zu löschen, die nicht existiert. Überprüfe, ob der Sharepoint Dateipfad korrekt ist.


Alternative Methoden

  1. FSO verwenden: Wie im vorherigen Beispiel kannst Du die FileSystemObject (FSO) Methode verwenden, um mit Dateien zu arbeiten. Diese Methode ist nützlich, wenn Du Dateipfade dynamisch anpassen möchtest.

  2. Sharepoint in Explorer einbinden: Eine weitere Methode besteht darin, Sharepoint als Netzwerkressource in deinen Windows Explorer einzubinden. Dadurch erhältst Du einen Laufwerksbuchstaben für den Zugriff auf die Dateien.


Praktische Beispiele

Hier ist ein Beispiel, wie Du den lokalen Pfad dynamisch ermitteln kannst:

Sub SharePointConnect()
    Dim objNetzwerk As Object
    Dim fso As Object
    Dim strPath As String
    Dim strFrei As String
    Dim i As Integer

    Set objNetzwerk = CreateObject("WScript.Network")
    Set fso = CreateObject("Scripting.FileSystemObject")

    strPath = ActiveWorkbook.Path

    ' Finde den ersten freien Laufwerksbuchstaben
    For i = 65 To 90
        If Not fso.DriveExists(Chr(i)) Then
            strFrei = Chr(i) & ":"
            Exit For
        End If
    Next i

    ' Verbinde mit dem Sharepoint-Pfad
    objNetzwerk.MapNetworkDrive strFrei, strPath
    ' Hier kannst Du weitere Operationen ausführen
End Sub

Tipps für Profis

  • Achte darauf, dass Du den Sharepoint Dateipfad regelmäßig überprüfst, da sich Pfade ändern können.
  • Nutze Fehlerbehandlungsroutinen in Deinem VBA-Code, um Laufzeitfehler besser zu handhaben.
  • Teste Deinen Code zunächst in einer Entwicklungsumgebung, bevor Du ihn für andere Benutzer freigibst.

FAQ: Häufige Fragen

1. Wie kann ich den lokalen Pfad einer Sharepoint-Datei in Excel VBA anzeigen?
Du kannst den Pfad mithilfe der ActiveWorkbook.FullName-Eigenschaft auslesen, musst jedoch sicherstellen, dass Du den Pfad entsprechend anpasst.

2. Was kann ich tun, wenn Kill nicht funktioniert?
Wenn Kill nicht funktioniert, überprüfe den Pfad und stelle sicher, dass die Datei tatsächlich existiert, bevor Du versuchst, sie zu löschen. Alternativ kannst Du die FSO-Methode verwenden.

3. Wie kann ich Sharepoint als Laufwerk einbinden?
Du kannst Sharepoint über den Windows Explorer als Netzwerkressource einbinden, indem Du im Explorer auf "Netzlaufwerk verbinden" gehst und den Sharepoint-Link angibst.

4. Wie kann ich Laufzeitfehler in meinem VBA-Code vermeiden?
Implementiere Fehlerbehandlungsroutinen, um Laufzeitfehler abzufangen und zu behandeln, bevor sie den Ablauf des Programms stören.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige