Excel VBAで「TRL-MTP」を使ってみた!

ブログ

TRL-MTPの使用例:第2弾です。

今回はExcelのVBAです。やりたいことは以下のとおりです。
対象となるアプリは「TRL PICKING」を想定しています。
選択されたフォルダに存在する、拡張子が「.txt」のピッキングリストファイルをスマホの指定フォルダへ送信します。
また、スマホの指定フォルダに存在する、拡張子が「.ret」というピッキング結果ファイルをPCへ受信します。

とりあえずまずはAPIなどの標準モジュールから。

「Module1」

Option Explicit

Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
  ByVal dwProcessId As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Const STILL_ACTIVE As Long = &H103
Const PROCESS_QUERY_INFORMATION As Long = &H400

Public Function pubProcessStart(ByVal pstrExePath As String, ByVal pstrArgs As String) As Long

    Dim lngId As Long
    Dim lngProcess As Long
    Dim lngExitCode As Long
    
    lngExitCode = -1
    
    lngId = CLng(Shell(pstrExePath & " " & pstrArgs, vbNormalFocus))
    lngProcess = OpenProcess(PROCESS_QUERY_INFORMATION, True, lngId)
    Do
        GetExitCodeProcess lngProcess, lngExitCode
        DoEvents
    Loop While lngExitCode = STILL_ACTIVE
    
    CloseHandle lngProcess
    
    pubProcessStart = lngExitCode

End Function

Public Function pubGetMtpErrorString(ByVal plngExitCode As Long) As String

    Select Case plngExitCode
        Case -1
            pubGetMtpErrorString = "Canceled."
        Case 0
            pubGetMtpErrorString = "Completed."
        Case 1
            pubGetMtpErrorString = "Parameter error."
        Case 2
            pubGetMtpErrorString = "Device not found."
        Case 3
            pubGetMtpErrorString = "Target file or folder does not exist."
        Case 4
            pubGetMtpErrorString = "A file or folder with the same name exists."
        Case Else
            pubGetMtpErrorString = "Unexpected error."
    End Select

End Function

そんでこちらがシートのほうのモジュールになります。
送信が「cmdSend()」で受信が「cmdRecv()」です。それぞれボタンかなんか配置してマクロ呼び出しを行ってください。

「Sheet1(Sheet1)」

Option Explicit

Public Sub cmdSend()

    Dim strDevicePath As String
    Dim strPcPath As String
    Dim strArgs As String
    Dim lngRet As Long
    
    '--- ピッキングリストが存在するフォルダを指定させる
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show() Then
            '--- パラメータ設定
            strArgs = "/C:UL /O /M /B"
            strDevicePath = " /D:" & """" & _
              "PC¥Xperia Ace II¥内部共有ストレージ¥Documents¥PICKING¥Files¥<BASE_NAME>.<BASE_EXT>" & """"
            strPcPath = " /A:" & """" & .SelectedItems(1) & "¥*.txt" & """"
            '--- 送信(Upload)実行
            lngRet = pubProcessStart("""" & ThisWorkbook.Path & "¥TrlMtp.exe""", _
                strArgs & strDevicePath & strPcPath)
            If lngRet <> 0 Then
                Call MsgBox("UL Error.(" & lngRet & ":" & pubGetMtpErrorString(lngRet) & ")", vbCritical)
            End If
        End If
    End With
    
End Sub

Public Sub cmdRecv()

    Dim strDevicePath As String
    Dim strPcPath As String
    Dim strArgs As String
    Dim lngRet As Long
    
    '--- ピッキング結果を保存するフォルダを指定させる
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show() Then
            '--- パラメータ設定
            strArgs = "/C:DL /O /M /B"
            strDevicePath = " /D:" & """" & _
              "PC¥Xperia Ace II¥内部共有ストレージ¥Documents¥PICKING¥Files¥*.ret" & """"
            strPcPath = " /A:" & """" & .SelectedItems(1) & "¥<BASE_NAME>.<BASE_EXT>" & """"
            '--- 受信(Download)実行
            lngRet = pubProcessStart("""" & ThisWorkbook.Path & "¥TrlMtp.exe""", _
                strArgs & strDevicePath & strPcPath)
            If lngRet <> 0 Then
                Call MsgBox("DL Error.(" & lngRet & ":" & pubGetMtpErrorString(lngRet) & ")", vbCritical)
            End If
        End If
    End With
    
End Sub

えっと、VBAは理解されている方むけの情報なので、VBAなんかわからんという方は既にご案内したショートカットとかバッチファイルのほうでやってみてください。
まあ、ちょっとコマンドライン引数のパスの部分が複雑になるんですが、詳細についてはhttp://trl.main.jp/trlmtp/をご覧ください。VB.NETとかからでも似たような感じでコールすることになるので、とりあえず使い方の説明は以上となります。
もしわからないことがあったら、個別にご質問くださいね。( ^ω^ )

※[2023/03/16:追記]URLが変更となっております。新しいURLはこちら

コメント

タイトルとURLをコピーしました