Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Excel-Datei auf Sharepoint hochladen

Forumthread: Excel-Datei auf Sharepoint hochladen

Excel-Datei auf Sharepoint hochladen
19.03.2026 09:34:37
flo4711
Hallo,
für ein SharePoint-Projekt ist es erforderlich, eine Excel-Datei vom lokalen File-System in eine Dokumenten-Bibliothek auf den Sharepoint hochzuladen.
Beispiele hierfür finden sich genügend im Internet ... also kein Problem … dachte ich … :-(

Ich habe mal zwei Alternativen getestet:

1. Datei per FileCopy hochladen:

Sub DateiAufSharePointHochladen()

Dim lokaleDatei As String
Dim sharePointPfad As String

' Lokaler Pfad der Datei
lokaleDatei = "H:\Test.xlsx"

' SharePoint-Pfad
sharePointPfad = "https://MeineFirma.sharepoint.com/sites/Unternehmensdashboard/Freigegebene%20Dokumente/Test.xlsx"

On Error Resume Next
FileCopy lokaleDatei, sharePointPfad

If Err.Number = 0 Then
MsgBox "Datei erfolgreich hochgeladen!", vbInformation
Else
MsgBox "Fehler: " & Err.Number & " " & Err.Description, vbCritical
End If
On Error GoTo 0
End Sub

2. Datei per FileSystemObject auf SP hochladen:

Sub DateiAufSharePointHochladen2()

Dim FSO As FileSystemObject
Dim lokaleDatei As String
Dim sharePointPfad As String

Set FSO = New FileSystemObject

' Pfad zur lokalen Datei
lokaleDatei = "H:\Test.xlsx"

sharePointPfad = "https://MeineFirma.sharepoint.com/sites/Unternehmensdashboard/Freigegebene%20Dokumente/Test.xlsx"

' Prüfen, ob lokale Datei existiert
If FSO.FileExists(lokaleDatei) Then
' Datei kopieren (überschreibt Zieldatei, wenn vorhanden)
On Error Resume Next ' Fehlerbehandlung, falls Zugriff verweigert
FSO.CopyFile Source:=lokaleDatei, Destination:=sharePointPfad, OverWriteFiles:=True

If Err.Number = 0 Then
MsgBox "Datei erfolgreich hochgeladen!", vbInformation
Else
MsgBox "Fehler beim Upload: " & Err.Number & " " & Err.Description, vbCritical
End If
On Error GoTo 0
Else
MsgBox "Lokale Datei nicht gefunden.", vbExclamation
End If

Set FSO = Nothing
End Sub

Beide Alternativen laufen auf einen Fehler (75 - Fehler beim Zugriff auf Pfad/Datei bzw. 76 - Pfad nicht gefunden )

Die Frage stellt sich nur warum?
Die lokale, zu kopierende Datei "Test.xlsx" liegt direkt im LW H:\ und ist vorhanden
Die URL des SharePoint-Ordners lautet wie im Makro definiert (d.h. wenn ich diese URL manuell im Browser eingebe, öffnet sich die vorhandenen Datei "Test.xlsx"
Berechtigungsproblem? Wenn ich die Datei per "drag and drop" in die Sharepoint Bibliothek ziehe wird die vorhandene Datei ersetzt bzw die Datei angelegt, wenn noch nicht vorhanden.

Wenn ich im Makro eine PDF-Ausgabe des Arbeitsblattes mit dem selben SharePoint-Pfad mache, klappt das auch ohne Probleme🤔:

sharePointPfad = "https://MeineFirma.sharepoint.com/sites/Unternehmensdashboard/Freigegebene%20Dokumente/Test.pdf"


ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= sharePointPfad, Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False

Wir setzen Microsoft 365 Apps for Business und SharePoint (online) ein.

Vll. gibt es hier ja noch eine Hürde die ich nicht kenne oder sehe ... wäre für alle Tipps die mich hier irgendwie weiter bringen könnten dankbar!

Gruß
Gode
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel-Datei auf Sharepoint hochladen
19.03.2026 09:55:54
UweD
Hallo


Ich hatte auch Probleme damit und lange rumprobiert.

Ich nutze nun folgendes Unterprogramm dazu.
(zwar genau anders herum, Datei vom sharepoint auf lokales LW, kannst es ja mal versuchen)


Private Sub DatCopy(Quelle As String, Ziel As String)

Dim http As Object
Dim stream As Object
On Error GoTo Cleanup ' Fehlerbehandlung

Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", Quelle & "?nocache=" & Timer, False
http.Send

If http.Status = 200 Then
Set stream = CreateObject("ADODB.Stream")
stream.Type = 1 ' binär
stream.Open
stream.Write http.responseBody
stream.SaveToFile Ziel, 2 ' overwrite
End If

Cleanup:
On Error Resume Next
If Not stream Is Nothing Then
stream.Close
Set stream = Nothing
End If
Set http = Nothing
End Sub


Aufgerufen würde das dann bei dir:
Call DatCopy(lokaleDatei, sharePointPfad)




LG UweD
Anzeige
AW: Excel-Datei auf Sharepoint hochladen
19.03.2026 12:16:42
flo4711
Hallo Uwe,

auf Basis deines Ansatzes habe ich jetzt nochmals im Internet recherchiert und folgende Prozedur gefunden, die ich für meinen Fall angepasst habe.
Ich denke das Problem vorher war einerseits die Authorisierung und der URL-Pfad.
Im Makro unter Punkt 3. wird die URL etwas anders zusammengebaut.
Vielleicht hilft das ja auch nochmal anderen Personen, die vor diesem Upload-Problem stehen.

Sub UploadToSharePointWithDigest()

Dim xmlHttp As Object
Dim sharePointSiteUrl As String
Dim folderPath As String
Dim fileName As String
Dim uploadUrl As String
Dim requestDigest As String
Dim localFilePath As String
Dim adoStream As Object
Dim fileContent As Variant

sharePointSiteUrl = "https://MeineFirma.sharepoint.com/sites/Unternehmensdashboard"
folderPath = "Freigegebene Dokumente" ' Name der Bibliothek
fileName = "Test.xlsx"
localFilePath = "H:\Test.xlsx"

' 1. Form Digest Token abrufen (WICHTIG für POST-Requests)
Set xmlHttp = CreateObject("MSXML2.XMLHTTP.6.0")
xmlHttp.Open "POST", sharePointSiteUrl & "/_api/contextinfo", False

' Versuch, die Windows-Anmeldung zu nutzen
xmlHttp.setRequestHeader "accept", "application/json;odata=verbose"
xmlHttp.send ""

If xmlHttp.Status = 200 Then
' Den Token aus der JSON-Antwort extrahieren
' (Vereinfacht mit InStr, da VBA kein eingebautes JSON-Parsing hat)
Dim response As String
response = xmlHttp.responseText
requestDigest = Mid(response, InStr(response, "FormDigestValue"":""") + 18)
requestDigest = Left(requestDigest, InStr(requestDigest, """") - 1)
Else
MsgBox "Fehler beim Abrufen des Tokens: " & xmlHttp.Status & vbCrLf & xmlHttp.responseText
Exit Sub
End If

' 2. Datei binär einlesen
Set adoStream = CreateObject("ADODB.Stream")
adoStream.Type = 1 ' Binär
adoStream.Open
adoStream.LoadFromFile localFilePath
fileContent = adoStream.Read
adoStream.Close

' 3. Upload-URL zusammenbauen
uploadUrl = sharePointSiteUrl & "/_api/web/GetFolderByServerRelativeUrl('" & folderPath & "')/Files/add(url='" & fileName & "',overwrite=true)"

' 4. Datei hochladen
xmlHttp.Open "POST", uploadUrl, False
xmlHttp.setRequestHeader "X-RequestDigest", requestDigest
xmlHttp.setRequestHeader "accept", "application/json;odata=verbose"
xmlHttp.setRequestHeader "Content-Type", "application/octet-stream"

On Error Resume Next
xmlHttp.send fileContent

If Err.Number > 0 Then
MsgBox "Netzwerkfehler: " & Err.Description
ElseIf xmlHttp.Status = 200 Or xmlHttp.Status = 201 Then
MsgBox "Upload erfolgreich!", vbInformation
Else
MsgBox "Fehler " & xmlHttp.Status & ": " & xmlHttp.responseText
End If

Set xmlHttp = Nothing
End Sub

Dir nochmal vielen Dank für deinen Ansatz, der mich dann letztlich doch zum Ziel geführt hat! 👍

Gruß
Gode
Anzeige
AW: Excel-Datei auf Sharepoint hochladen
19.03.2026 10:51:01
flo4711
Hallo Uwe,

vielen Dank für deinen Tpp!
Leider hat er auch (noch) nicht ganz zum gewünschten Erfolg beigetragen.

Nach http.Send ist bei mir der http.Status =0 ... kommt also nicht in die Abhandlung zum Schreiben/Speichern rein.

Was ich allerdings festgestellt habe ist, dass die bereits existierende Datei "Test.xlsx" auf dem Sharepoint einen neuen "Geändert-Zeitstempel" erhalten hat ...

Vll. hast du ja dazu noch eine Idee?

Implementiert habe ich das Makro genau wie von dir oben beschrieben.

Gruß
Gode
Anzeige

Forumthreads zu verwandten Themen

Anzeige