Это продолжение этого вопроса и отличный ответ:
Копирование файлов с индикатором выполнения
Итак, я добавил код из ответа Сиддхарта Раута, и он делает именно то, что я хочу, за небольшим исключением. Когда я копирую файлы, я перебираю каждый файл в каталоге и копирую его, пока он не является * List.xml. Поскольку я заменяю существующую библиотеку, 97% документов уже существуют, и мне каждый раз предлагается заменить существующие документы.
Есть ли способ заставить его выбрать замену для всех файлов? Нужно ли переформатировать / структурировать последовательность моего кода?
Function UploadToSharepoint(Folderpath As String, Foldername As String, Filenames() As String, SharepointLinks() As String) As Boolean
'upload file to sharepoint library based on the folder name
Dim SharePointLib As String
Dim LocalAddress As String
Dim DestinationAddress As String
Dim xCounter As Long
On Error GoTo loadFailed
Pickafolder:
Folderpath = FolderPick
Foldername = Left(Folderpath, Len(Folderpath) - 1)
Foldername = RIght(Foldername, Len(Foldername) - InStrRev(Foldername, "\"))
Select Case Foldername
Case "OPSS", "SSP", "OPSD", "MTOD", "SSD"
SharePointLib = "\\my.company.com\Subsite\" & Foldername & "\"
Case "West", "Eastern", "Northeastern", "Northwestern", "Head Office"
SharePointLib = "\\my.company.com\Subsite\NSP\" & Foldername & "\"
Case "NSP", "NSSP"
MsgBox "Pick the NSP regional sub folder: West, Eastern, Northeastern, Northwestern, Head Office"
GoTo Pickafolder
Case Else
MsgBox "Inappropriate directory to upload from. Please select one of the CPS download directories"
GoTo Pickafolder
End Select
Filenames = GetFilesDir(Folderpath)
ReDim SharepointLinks(LBound(Filenames) To UBound(Filenames))
For xCounter = LBound(Filenames) To UBound(Filenames)
LocalAddress = Folderpath & Filenames(xCounter)
DestinationAddress = SharePointLib & Filenames(xCounter)
'**********************************************************
Call VBCopyFolder(LocalAddress, DestinationAddress)
'**********************************************************
SharepointLinks(xCounter) = "#http:" & Replace(DestinationAddress, "\", "/") & "#"
Next xCounter
UploadToSharepoint = True
Exit Function
loadFailed:
UploadToSharepoint = False
End Function
И, судя по всему, я не исключаю файл, на который я ссылался ранее ... должен делать это где-то еще.
Обновление
На основе комментариев, полученных по связанному вопросу, решение состоит в том, чтобы объявить открытую константу в начале:
Public Const FOF_NOCONFIRMATION As Long = &H10
и затем в процедуре копирования измените строку кода на:
.fFlags = FOF_SIMPLEPROGRESS Or FOF_NOCONFIRMATION
Теперь это решает проблему постоянного запроса на подтверждение замены. Я очень рад этому. Проблема теперь в том, что в окне прогресса отображается первый файл, который нужно скопировать, затем он исчезает, но не появляется снова для последующих файлов. Остальные файлы по-прежнему копируются, и prg продолжает, как и положено. Однако весь смысл индикатора прогресса заключается в том, чтобы люди знали, что «ВЕЩИ» все еще происходят в фоновом режиме, а теперь этого не происходит. Что-то мне нужно отрегулировать?
Обновление 2
После запуска моего кода и выбора исходного каталога на сетевом диске вместо локального компьютера появляется окно копирования для каждого отдельного файла, как я и ожидал. Я замечаю, что иногда индикатор выполнения закрывается до достижения 100%. Это наводит меня на мысль, что, поскольку размеры файлов настолько малы, что при копировании с моего локального диска на sharepoint операция завершается настолько быстро, что у нее нет времени рисовать и обновлять окно прогресса до того, как оно закроется.