簡體   English   中英

VBA可以調用windows文件傳輸彈窗嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM