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?
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.
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.
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 #.
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.
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