web-dev-qa-db-fra.com

Ouvrez un fichier Excel à partir du site SharePoint

J'essaie d'ouvrir un fichier Excel à partir de SharePoint à l'aide de VBA. Étant donné que le fichier que je recherche peut être différent à chaque fois que j'exécute la macro, je souhaite pouvoir afficher le dossier SharePoint et sélectionner le fichier dont j'ai besoin.

Le code ci-dessous fonctionne correctement lorsque je souhaite rechercher un fichier sur un lecteur réseau, mais lorsque je le remplace par une adresse SharePoint, j'obtiens "Erreur d'exécution 76: chemin introuvable".

Sub Update_monthly_summary()

Dim SummaryWB As Workbook
Dim SummaryFileName As Variant

ChDir  "http://sharepoint/my/file/path"
SummaryFileName = Application.GetOpenFilename("Excel-files,*.xls", _
1, "Select monthly summary file", , False)
If SummaryFileName = False Then Exit Sub

Set SummaryWB = Workbooks.Open(SummaryFileName)

End Sub

Lorsque je colle cette adresse dans l'Explorateur Windows, je n'ai aucun problème pour accéder au dossier SharePoint, donc je sais que le chemin est correct.

Pourquoi VBA ne l'aime-t-il pas?

12
Pocahontas

Essayez ce code pour choisir un fichier à partir d'un site SharePoint:

Dim SummaryWB As Workbook
Dim vrtSelectedItem As Variant

With Application.FileDialog(msoFileDialogOpen)
    .InitialFileName = "https://sharepoint.com/team/folder" & "\"
    .AllowMultiSelect = False
    .Show
    For Each vrtSelectedItem In .SelectedItems
        Set SummaryWB = Workbooks.Open(vrtSelectedItem)
    Next
End With

If SummaryWB Is Nothing then Exit Sub

Si je me souviens bien, le Microsoft Scripting Runtime la référence doit être activée. De plus, votre site peut utiliser des barres obliques inverses, le mien utilise des barres obliques.

10
ARich

Je transforme l'URL en une adresse WebDAV en utilisant la fonction suivante que j'ai créée. Cette fonction renvoie également les chemins système réguliers et les chemins UNC indemnes.

Appelez cette fonction en l'ajoutant à un module dans votre projet VBA et en entrant MyNewPathString = Parse_Resource(myFileDialogStringVariable) juste après votre commande de dialogue de fichier et avant d'utiliser le chemin sélectionné par la boîte de dialogue de fichier. Référencez ensuite "MyNewPathString" lorsque vous utilisez l'emplacement du fichier cible.

 Public Function Parse_Resource(URL As String)
 'Uncomment the below line to test locally without calling the function & remove argument above
 'Dim URL As String
 Dim SplitURL() As String
 Dim i As Integer
 Dim WebDAVURI As String


 'Check for a double forward slash in the resource path. This will indicate a URL
 If Not InStr(1, URL, "//", vbBinaryCompare) = 0 Then

     'Split the URL into an array so it can be analyzed & reused
     SplitURL = Split(URL, "/", , vbBinaryCompare)

     'URL has been found so prep the WebDAVURI string
     WebDAVURI = "\\"

     'Check if the URL is secure
     If SplitURL(0) = "https:" Then
         'The code iterates through the array excluding unneeded components of the URL
         For i = 0 To UBound(SplitURL)
             If Not SplitURL(i) = "" Then
                 Select Case i
                     Case 0
                         'Do nothing because we do not need the HTTPS element
                     Case 1
                         'Do nothing because this array slot is empty
                     Case 2
                     'This should be the root URL of the site. Add @ssl to the WebDAVURI
                         WebDAVURI = WebDAVURI & SplitURL(i) & "@ssl"
                     Case Else
                         'Append URI components and build string
                         WebDAVURI = WebDAVURI & "\" & SplitURL(i)
                 End Select
             End If
         Next i

     Else
     'URL is not secure
         For i = 0 To UBound(SplitURL)

            'The code iterates through the array excluding unneeded components of the URL
             If Not SplitURL(i) = "" Then
                 Select Case i
                     Case 0
                         'Do nothing because we do not need the HTTPS element
                     Case 1
                         'Do nothing because this array slot is empty
                         Case 2
                     'This should be the root URL of the site. Does not require an additional slash
                         WebDAVURI = WebDAVURI & SplitURL(i)
                     Case Else
                         'Append URI components and build string
                         WebDAVURI = WebDAVURI & "\" & SplitURL(i)
                 End Select
             End If
         Next i
     End If
  'Set the Parse_Resource value to WebDAVURI
  Parse_Resource = WebDAVURI
 Else
 'There was no double forward slash so return system path as is
     Parse_Resource = URL
 End If


 End Function

Cette fonction vérifiera si votre chemin de fichier est une URL et s'il est sécurisé (HTTPS) ou non sécurisé (HTTP). S'il s'agit d'une URL, il créera la chaîne WebDAV appropriée afin que vous puissiez créer un lien direct vers le fichier cible dans SharePoint.

L'utilisateur sera probablement invité à fournir des informations d'identification à chaque ouverture du fichier, en particulier s'il ne se trouve pas sur le même domaine que votre batterie de serveurs SharePoint.

S'IL VOUS PLAÎT NOTE: Je n'ai pas testé cela avec un site http, mais je suis convaincu que cela fonctionnera.

7
Shrout1

De votre script n'utilisez pas http://sharepoint/my/file comme chemin d'accès mais plutôt \\sharepoint\my\file et puis devrait fonctionner. Cela fonctionne pour mes programmes réalisés en C #.

1
Jacek

Veuillez noter qu'il y a une faute de frappe dans votre code initial

MyNewPathString = ParseResource(myFileDialogStringVariable)

devrait être remplacé par

MyNewPathString = Parse_Resource(myFileDialogStringVariable)

Le trait de soulignement manquait.

1
Ed van Harmelen

Vous pouvez utiliser mon approche pour mapper le dossier SharePoint en tant que lecteurs réseau. Ensuite, vous pouvez continuer comme vous l'avez fait jusqu'à présent.

Excel VBA Up-/Téléchargement à partir de plusieurs dossiers SharePoint

Ensuite, vous pouvez également parcourir les fichiers avec Dir ou File System Object

0
psychicebola