我正在为我的工作尝试一个VBA脚本,最后我希望它通过将所有文件复制到一个网络驱动器来备份自己。这需要很长时间,因为它有大量的数据,而且VPN的速度很慢。
与其编写我自己的进度条脚本来让用户知道它还在工作,VBA还能调用普通的弹出来跟踪它吗?
但是,当我从工作簿运行它时,它会在没有复制任何内容的情况下使工作簿崩溃。
#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发布于 2020-05-07 20:54:47
我无法理解Windows,所以我放弃了整个代码,在这个站点上找到了其他的东西。This StackOverFlow Thread对我的问题有一个简单得多的解决方案。
我能够让它与下面的代码完美地工作在一起。我使用了tmoore82给出的解决方案。调用VARS是将我需要的路径作为变量。
Public Function Copystuff(ByVal vSource, ByVal vDest) As Long
Dim objShell, objFileSource, objFileDest As Object
Set objShell = CreateObject("Shell.Application")
Set objFileSource = objShell.Namespace((vSource))
Set objFileDest = objShell.Namespace((vDest))
Call objFileDest.CopyHere(objFileSource.Items)
End Function
Sub copystuff2()
Dim src, dest
Call VARS
vSource = DL_PATH
vDest = PATH_TO_NETWORK_DRIVE
Call Copystuff(vSource, vDest)
End Subhttps://stackoverflow.com/questions/61602664
复制相似问题