Excel VBA Up-/Download 来自多个 SharePoint 文件夹
Excel VBA Up-/Download from multiple SharePoint folders
我在 Internet 上找到了使用 VBA 从 SharePoint 文件夹下载文件的示例代码(在资源管理器中打开,映射到驱动器盘符等)
因此,我编写了如下代码:
Dim sharepointFolder As String
Dim colDisks As Variant
Dim objWMIService As Object
Dim objDisk As Variant
Dim driveLetter As String
'Create FSO and network object
Set objNet = CreateObject("WScript.Network")
Set fs = CreateObject("Scripting.FileSystemObject")
'Get all used Drive-Letters
Set objWMIService = GetObject("winmgmts:\" & "." & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk")
'Loop through used Drive-Letters
For Each objDisk In colDisks
For i = 65 To 90
'If letter is in use exit loop and remember letter.
If i = Asc(objDisk.DeviceID) Then
j = i
Exit For
'letters which are not checked yet are possible only
ElseIf i > j Then
driveLetter = Chr(i) & ":"
Exit For
End If
Next i
'If a Drive-Letter is found exit the loop
If driveLetter <> "" Then
Exit For
End If
Next
'define path to SharePoint
sharepointFolder = "https://spFolder/Sector Reports/"
'Map the sharePoint folder to the free Drive-Letter
objNet.MapNetworkDrive driveLetter, sharepointFolder
'set the folder to the mapped SharePoint-Path
Set folder = fs.GetFolder(driveLetter)
在这个阶段,我可以将文件上传到文件夹:
https://spFolder/Sector Reports/
不过,我也想上传文件到文件夹例如:
https://spFolder/Documents/
我还使用以下函数删除了之前的驱动器号:
removeDriveLetter "Letter"
现在我遇到了问题,如果我将一个新文件夹映射到一个字母:
mapDriveLetter "A:\", sharepointFolder
并且想在这封信上存点东西,它会一直保存在之前的路径上。例如:
mapDriveLetter "A:\", sharePointFolder1
removeDriveLetter "A:\"
mapDriveLetter "A:\", sharePointFolder2
workbook.saveas "A:\" & workbookName
在这种情况下,工作簿始终保存到 "sharePointFolder1" 中给出的路径,而不是 "sharePointFolder2" 中给出的路径。
我解决了这个问题如下:
为了将包含请求文件的每个文件夹连接到网络驱动器盘符,我将所有文件夹放入同一个库中,并将库的根文件夹仅连接到网络驱动器盘符。
在连接的情况下
https://spFolder/Sector Reports/
分别https://spFolder/Documents/
我将仅连接 https://spFolder/
并使用文件系统对象浏览子目录。
我在 Internet 上找到了使用 VBA 从 SharePoint 文件夹下载文件的示例代码(在资源管理器中打开,映射到驱动器盘符等)
因此,我编写了如下代码:
Dim sharepointFolder As String
Dim colDisks As Variant
Dim objWMIService As Object
Dim objDisk As Variant
Dim driveLetter As String
'Create FSO and network object
Set objNet = CreateObject("WScript.Network")
Set fs = CreateObject("Scripting.FileSystemObject")
'Get all used Drive-Letters
Set objWMIService = GetObject("winmgmts:\" & "." & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk")
'Loop through used Drive-Letters
For Each objDisk In colDisks
For i = 65 To 90
'If letter is in use exit loop and remember letter.
If i = Asc(objDisk.DeviceID) Then
j = i
Exit For
'letters which are not checked yet are possible only
ElseIf i > j Then
driveLetter = Chr(i) & ":"
Exit For
End If
Next i
'If a Drive-Letter is found exit the loop
If driveLetter <> "" Then
Exit For
End If
Next
'define path to SharePoint
sharepointFolder = "https://spFolder/Sector Reports/"
'Map the sharePoint folder to the free Drive-Letter
objNet.MapNetworkDrive driveLetter, sharepointFolder
'set the folder to the mapped SharePoint-Path
Set folder = fs.GetFolder(driveLetter)
在这个阶段,我可以将文件上传到文件夹:
https://spFolder/Sector Reports/
不过,我也想上传文件到文件夹例如:
https://spFolder/Documents/
我还使用以下函数删除了之前的驱动器号:
removeDriveLetter "Letter"
现在我遇到了问题,如果我将一个新文件夹映射到一个字母:
mapDriveLetter "A:\", sharepointFolder
并且想在这封信上存点东西,它会一直保存在之前的路径上。例如:
mapDriveLetter "A:\", sharePointFolder1
removeDriveLetter "A:\"
mapDriveLetter "A:\", sharePointFolder2
workbook.saveas "A:\" & workbookName
在这种情况下,工作簿始终保存到 "sharePointFolder1" 中给出的路径,而不是 "sharePointFolder2" 中给出的路径。
我解决了这个问题如下:
为了将包含请求文件的每个文件夹连接到网络驱动器盘符,我将所有文件夹放入同一个库中,并将库的根文件夹仅连接到网络驱动器盘符。
在连接的情况下
https://spFolder/Sector Reports/
分别https://spFolder/Documents/
我将仅连接 https://spFolder/
并使用文件系统对象浏览子目录。