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

Forumthread: Verschieben von Datein Im Sharepoint per VBA in der Cloud

Verschieben von Datein Im Sharepoint per VBA in der Cloud
23.10.2023 14:50:12
Julian9998
Ich Lokal auf meinem PC kann ich eine objektliste aus einem Ordner erstellen in dem Ich den direkten Pfad mit angebe. Das ganze tool soll jetzt in die Cloud wandern doch ein aufruf der Sharepoint url ist nicht möglich. Die URL wird hier definiert nur leider klappt das nicht für online pfade.

Set objFileSystem = CreateObject("scripting.FileSystemObject")

' Angabe auf den Ordner, der ausgelesen werden soll
Set objVerzeichnis = objFileSystem.GetFolder("https://xxx.sharepoint.com/:f:/r/teams/Teamxx-110FileShare/Shared%20Documents/110%20FileShare/x/Test1?csf=1&web=1&e=GgxwiU")
Set objDateienliste = objVerzeichnis.Files



Folgend der gesamte code :

Option Explicit

Sub Dateien_Auflisten_Archivieren()

Dim eingabe As String
Dim lngZeile As Long
Dim lngZeile2 As Long
Dim objFileSystem As Object
Dim objVerzeichnis As Object
Dim objDateienliste As Object
Dim objDatei As Object
Dim StringURL As String
Dim ws1 As Worksheet
Dim rng As Range
Dim foundCell As Range

StringURL = "https://xxx.sharepoint.com/:f:/r/teams/Teamx-110FileShare/Shared%20Documents/110%20FileShare/x/Test1?csf=1&web=1&e=GgxwiU"
Set objFileSystem = CreateObject("scripting.FileSystemObject")

' Angabe auf den Ordner, der ausgelesen werden soll
Set objVerzeichnis = objFileSystem.GetFolder("https://xxx.sharepoint.com/:f:/r/teams/Teamxx-110FileShare/Shared%20Documents/110%20FileShare/x/Test1?csf=1&web=1&e=GgxwiU")
Set objDateienliste = objVerzeichnis.Files

' Hier wird angefangen zu schreiben und die letzte Zeile in Spalte 1 gezählt in x
lngZeile = 0

' Arbeitsblätter (Tabellen) 1 und 2 festlegen
Set ws1 = ThisWorkbook.Sheets("x") ' Anpassen an den Namen deines Arbeitsblatts


' Bildschirmdarstellung Ausschalten
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual


For Each objDatei In objDateienliste
' Angabe nach welchen Dateityp gesucht werden soll. Hier wird die Methode Right verwendet, um die letzten 4 Zeichen des Namens des Objekts objDatei zu extrahieren. Dann wird die Methode LCase verwendet, um den extrahierten Teil in Kleinbuchstaben umzuwandeln. Schließlich wird überprüft, ob dieser Teil gleich ".jpg" ist.
If Not objDatei Is Nothing And Right(LCase(objDatei.Name), 4) = ".jpg" Then

' MsgBox für die erste Frage mit "Ja" oder "Nein" Optionen

If MsgBox("Möchten Sie eine A2V-Nummer eingeben?", vbQuestion + vbYesNo, "A2V-Nummer eingeben?") = vbNo Then
Exit Sub ' Beendet das Programm
End If

' InputBox für die A2V-Nummer
Do

eingabe = InputBox("Bitte geben Sie die A2V-Nummer ein", "A2V-Nummer muss groß geschrieben sein", ActiveCell)


' Überprüfen, ob das Feld leer ist
If KeineEingabe(eingabe) Then
Exit Sub
End If

' Überprüfen, ob das Feld leine Gültige A2V nummer hat
If Not IsValidA2VNummer(eingabe) Then
MsgBox "Ungültige A2V-Nummer. Bitte korrigieren Sie die Eingabe.", vbExclamation, "Ungültige Eingabe"
End If

Loop While Not IsValidA2VNummer(eingabe)

' In Tabelle 2 nach dem Wert in der Variable eingabe suchen(Materialnummer)
Set foundCell = ws1.Range("C:C").Find(What:=eingabe, LookIn:=xlValues, LookAt:=xlWhole)
lngZeile = foundCell.Offset(0, 0).Row

' Ausgabe des Hyperlinks in Zeile und Spalte
lngZeile2 = Cells(lngZeile, Columns.Count).End(xlToLeft).Column
ws1.Hyperlinks.Add ws1.Cells(lngZeile, lngZeile2 + 1), Address:=StringURL & "Archiv\" & objDatei.Name

' Verschiebe die Datei ins Archivverzeichnis
objDatei.Move StringURL & "Archiv\" & objDatei.Name

End If

Next objDatei

' Bildschirmdarstellung wieder einschalten
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

Function IsValidA2VNummer(ByVal value As String) As Boolean
' Prüft, ob der Wert eine gültige A2V-Nummer ist (Großbuchstaben und Länge 14)
IsValidA2VNummer = (Left(value, 3) = "A2V" And Len(value) = 14)
End Function
Function KeineEingabe(ByVal value As String) As Boolean
' Prüft, ob der Wert eine gültige A2V-Nummer ist (Großbuchstaben und Länge 14)
KeineEingabe = value = ""
End Function


Das ist der Code
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verschieben von Datein Im Sharepoint per VBA in der Cloud
25.10.2023 19:19:55
bigmayo
Moin Julian,

Der Code, den du bereitgestellt hast, verwendet VBA, beachte, dass die Verwendung von VBA in SharePoint nicht immer reibungslos verläuft, insbesondere wenn es sich um SharePoint Online handelt.

Die Verwendung von "scripting.FileSystemObject" ist normalerweise auf lokale Dateisysteme beschränkt und nicht für den direkten Zugriff auf SharePoint-Dateien geeignet. SharePoint Online verwendet REST-APIs oder den SharePoint-Clientobjektmodus, um mit Dateien zu interagieren. Das bedeutet, dass der direkte Pfad "https://xxx.sharepoint.com/..." möglicherweise nicht für die Verwendung mit "scripting.FileSystemObject" geeignet ist.

Es gibt jedoch Möglichkeiten, mit SharePoint Online-Dateien über VBA zu interagieren, indem du die SharePoint REST-APIs oder den SharePoint-Clientobjektmodus verwendest. Dies erfordert eine spezifische Konfiguration und den Zugriff auf SharePoint Online.

Wenn du mit SharePoint Online-Dateien in Excel über VBA interagieren möchtest, empfehle ich, dich mit den folgenden Themen vertraut zu machen:

SharePoint REST-APIs: Du kannst die SharePoint REST-APIs verwenden, um Dateien in SharePoint Online zu erstellen, zu aktualisieren und zu verschieben. Hier ist ein Beispiel, wie du REST-APIs in VBA verwendest: https://docs.microsoft.com/en-us/sharepoint/dev/sp-add-ins/working-with-folders-and-files-with-rest

SharePoint-Clientobjektmodus: Der SharePoint-Clientobjektmodus ermöglicht die Programmierung in VBA zur Interaktion mit SharePoint Online. Hier ist ein Beispiel, wie du den Clientobjektmodus in VBA einrichtest: https://docs.microsoft.com/en-us/sharepoint/dev/sp-add-ins/complete-basic-operations-using-sharepoint-client-library-code

Beachte, dass die Verwendung von SharePoint Online-Dateien über VBA einige komplexe Schritte erfordert, einschließlich der Berechtigungen und Authentifizierung. Es kann hilfreich sein, SharePoint-Entwicklungsressourcen zu konsultieren oder einen SharePoint-Entwickler für Unterstützung hinzuzuziehen, um sicherzustellen, dass dein Code ordnungsgemäß mit SharePoint Online interagiert.

Gruß
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Dateien im SharePoint per VBA in der Cloud verschieben


Schritt-für-Schritt-Anleitung

Um Dateien in SharePoint per VBA zu verschieben, musst du sicherstellen, dass du die richtigen Methoden verwendest, da der FileSystemObject nicht für SharePoint Online geeignet ist. Hier ist eine grundlegende Schritt-für-Schritt-Anleitung:

  1. Referenz hinzufügen: Stelle sicher, dass du die Microsoft Scripting Runtime Referenz in deinem VBA-Projekt hinzugefügt hast.

  2. REST-API verwenden: Verwende die SharePoint REST-API, um mit Dateien zu interagieren. Hier ist ein einfaches Beispiel, um eine Datei zu verschieben:

    Sub SharePointDateiVerschieben()
       Dim http As Object
       Set http = CreateObject("MSXML2.XMLHTTP")
    
       Dim url As String
       Dim data As String
    
       url = "https://xxx.sharepoint.com/_api/web/GetFileByServerRelativeUrl('/Shared Documents/Datei.jpg')/moveTo(newurl='/Shared Documents/Archiv/Datei.jpg', flags=1)"
    
       With http
           .Open "POST", url, False
           .setRequestHeader "Accept", "application/json;odata=verbose"
           .setRequestHeader "Content-Type", "application/json;odata=verbose"
           .setRequestHeader "Authorization", "Bearer " & DeinAccessToken
           .send
       End With
    
       MsgBox "Datei verschoben!"
    End Sub
  3. Authentifizierung: Achte darauf, dass du die Authentifizierung korrekt durchführst, um Zugriff auf die SharePoint-API zu erhalten.


Häufige Fehler und Lösungen

  1. Fehler: FileSystemObject funktioniert nicht mit SharePoint Online

    • Lösung: Verwende die SharePoint REST-API oder den SharePoint-Clientobjektmodus, wie oben beschrieben.
  2. Fehler: Berechtigungen fehlen

    • Lösung: Überprüfe die Berechtigungen für den Zugriff auf die SharePoint-Daten. Möglicherweise musst du die Berechtigungen anpassen.
  3. Fehler: Ungültige URL

    • Lösung: Stelle sicher, dass die URL korrekt formatiert ist und auf die richtige Datei verweist.

Alternative Methoden

Alternativ zum VBA-Ansatz kannst du auch andere Methoden verwenden, um Dateien in SharePoint zu verschieben:

  • Power Automate: Erstelle einen Flow, der Dateien automatisch basierend auf bestimmten Triggern verschiebt.
  • SharePoint-Clientobjektmodell: Verwende das Clientobjektmodell für eine robustere Interaktion mit SharePoint Online.

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du die VBA-SharePoint-API nutzen kannst:

Sub SharePointDateiArchivieren()
    Dim url As String
    Dim filePath As String

    filePath = "/Shared Documents/DeineDatei.txt"
    url = "https://xxx.sharepoint.com/_api/web/GetFileByServerRelativeUrl('" & filePath & "')/moveTo(newurl='/Shared Documents/Archiv/DeineDatei.txt', flags=1)"

    ' Der Rest des Codes wie im vorherigen Beispiel
End Sub

In diesem Beispiel wird eine Datei in einen Archivordner verschoben, indem die SharePoint REST-API genutzt wird.


Tipps für Profis

  • Testen in einer Entwicklungsumgebung: Teste deinen Code in einer sicheren Umgebung, bevor du ihn in der Produktion einsetzt.
  • Fehlerprotokollierung: Implementiere eine Fehlerprotokollierung, um Probleme bei der Ausführung des Codes schneller identifizieren zu können.
  • Verwende Tokens: Achte darauf, dass deine Authentifizierungstokens regelmäßig aktualisiert werden, um unerwartete Zugriffsprobleme zu vermeiden.

FAQ: Häufige Fragen

1. Kann ich den FileSystemObject für SharePoint Online verwenden? Nein, der FileSystemObject ist nicht für SharePoint Online geeignet. Verwende stattdessen die SharePoint REST-API.

2. Wie kann ich die Berechtigungen für meine SharePoint-Dateien überprüfen? Gehe zu SharePoint, öffne die Datei oder den Ordner, und überprüfe die Berechtigungen unter "Details" oder "Freigeben".

3. Was ist der SharePoint-Clientobjektmodus? Der SharePoint-Clientobjektmodus ermöglicht es dir, mit SharePoint Online über ein .NET-Framework-Objekt zu interagieren, was eine einfachere Programmierung in VBA ermöglicht.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige