巻取

書いてる内容があってるかはしりません

【VBA】ファイルサーバにフォルダをアップする

 ローカルにあるフォルダを、丸ごとネットワーク上の場所にアップする方法です。
 Pythonのshutl -> treecopyでも出来そうなんですが、できなかったので、VBAのモジュールで作って、「フォルダをコピーする」という部分だけVBAのモジュールとして作成して、Pythonから呼び出す形にしました。


 参考はこちら

 Zドライブに、一時的にアップロード先のフォルダを割り付けて、そこへコピーを行っています。

'VBA Module.xlsm

Option Explicit

Sub CopyDirectory(strSourceFol As String, strDestFol As String)
    
    'ファイルシステムのオブジェクトを作成・セット
    Dim FS As Object
    Dim WSNet As Object

    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set WSNet = CreateObject("WScript.Network")

    'Zドライブにコピー先のフォルダを割り付け
    If FSO.DriveExists("Z") Then WSNet.RemoveNetworkDrive "Z:"
    WSNet.MapNetworkdriver "Z:", strDestFol

    'コピー
    FSO.CopyFolder strSourceFol, "Z:\"
    WSNet.RemoveNetworkDrive "Z:"

    '片付け
    Set FSO = Nothing
    Set WSNet = Nothing

End Sub


Python側はいつものVB呼び出し。

#マクロ呼び出し
import xlwings as xw

def CallMacro()

    #諸設定
    macro_path = './Module.xlsm' #ブック名
    macro_name = 'CopyDirectory' #マクロ名
    source_dir_path = '転送したいフォルダ'
    dest_dir_path = '転送先のフォルダ'

    #マクロ実行
    app = xw.apps.add()
    app.display_alerts = False

    wb = xw.Book(macro_path)
    macro()(source_dir_path, dest_dir_path)

    #片付け
    wb.save() 
    wb.close()
    app.kill()

    return


 EXCEL操作といい、ファイルシステムの操作といい、Windows/Office関連の操作は、PythonよりVBの得意分野なのかもしれない。知らんけど