Я пробую сценарий VBA для своей работы и в конце я хотел бы, чтобы он сделал резервную копию, скопировав все файлы на сетевой диск. Это займет очень много времени, так как данных много, а VPN работает медленно.
Вместо того, чтобы писать собственный сценарий индикатора выполнения, чтобы пользователь знал, что он все еще работает, может ли VBA просто вызвать обычное [Windows всплывающее окно передачи файлов] [1], чтобы отслеживать это?
Здесь это код, который у меня сейчас есть, однако, когда я запускаю его из книги, он приводит к сбою книги без копирования.
#If VBA7 Then ' VBA7
Public Declare PtrSafe Function SHFileOperation Lib "shell32.dll" _
Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As LongPtr
Public Const FO_COPY = &H2
Public Const FOF_SIMPLEPROGRESS = &H100
Public Const FOF_NOCONFIRMATION As Long = &H10
Public Type SHFILEOPSTRUCT
hWnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Long
hNameMappings As Long
lpszProgressTitle As Long
End Type
#End If
Public Sub VBCopyFolder(ByRef strSource As String, ByRef strTarget As String)
Dim op As SHFILEOPSTRUCT
With op
.wFunc = FO_COPY
.pTo = strTarget
.pFrom = strSource
.fFlags = FOF_SIMPLEPROGRESS Or FOF_NOCONFIRMATION
End With
'~~> Perform operation
SHFileOperation op
End Sub
Sub copy_stuff()
Call VBCopyFolder("C:\Users\tihall\Daily Reports\V2 Testing\src", "C:\Users\tihall\Daily Reports\V2 Testing\dst")
End Sub