[英]Can VBA call the windows file transfer popup?
我正在為我的工作嘗試一個 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
我無法弄清楚 Windows API,所以我放棄了整個代碼並在這個網站上找到了其他東西。 這個 StackOverFlow 線程對我的問題有一個更簡單的解決方案。
我能夠使用下面的代碼使其完美運行。 我使用了tmoore82給出的解決方案。 Call VARS 是獲取我需要的 PATHS 作為變量。
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 Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.