簡體   English   中英

Excel 2013中的VBA-啟動批處理文件

[英]VBA in Excel 2013 - Launching batch file

早期注意:我不使用VBA編寫代碼,我基於編程邏輯對此有所了解。

我從我們部門的一個部門收到了一份文件,該宏基本上可以完成3件事。

1)在temp文件夾中創建xml文件

2)在文檔文件夾中創建批處理文件

3)在文檔文件夾中運行批處理文件

在進一步檢查了如何在VBA上進行編碼並理解邏輯之后,我找到了它用於批處理文件的行。

下面是代碼:

Sub Process_TRD()

    Dim r As Integer

    Dim TRDcommand As String
    Dim myFileName As String
    Dim file2Write As Integer




    TransferDeskPath = RegKeyRead("HKEY_LOCAL_MACHINE\SOFTWARE\Redacted\Install\MainDir") & "SSC\bin\"
    TransferDeskDrive = Left(RegKeyRead("HKEY_LOCAL_MACHINE\SOFTWARE\Redacted\Install\MainDir"), 2)

            If SunUser = "" Or SunPass = "" Then
                Load frmPwd
                frmPwd.Show
'            Else
'                SunUser = ActiveWorkbook.Worksheets("PWD").Cells(1, 1)
'                SunPass = ActiveWorkbook.Worksheets("PWD").Cells(1, 2)
            End If

            If SunPass <> "" And SunUser <> "" Then

                myFileName = Environ("USERPROFILE") & Application.PathSeparator & "Documents" & "\TRD.BAT"
                file2Write = FreeFile()
                If Len(Dir$(myFileName)) > 0 Then
                    Close #file2Write
                    Kill myFileName
                End If

                Open myFileName For Output As file2Write
                Print #file2Write, "C:"
                Print #file2Write, "CD\"
                Print #file2Write, "CD """ & TransferDeskPath & """ "


                If Sheets("SOE_Import").Cells(2, 3) = "ZAS" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_ZAS"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If
                If Sheets("SOE_Import").Cells(2, 3) = "ZDR" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_ZDR"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If
                If Sheets("SOE_Import").Cells(2, 3) = "ZSH" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_ZSH"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If
                If Sheets("SOE_Import").Cells(2, 3) = "ZYH" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_ZYH"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If
                If Sheets("SOE_Import").Cells(2, 3) = "ASB" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_ASB"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If
                If Sheets("SOE_Import").Cells(2, 3) = "DRB" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_DRB"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If
                If Sheets("SOE_Import").Cells(2, 3) = "SHK" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_SHK"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If
                If Sheets("SOE_Import").Cells(2, 3) = "YHM" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_YHM"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If

                If Sheets("SOE_Import").Cells(2, 3) = "JWM" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_JWM"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If
                If Sheets("SOE_Import").Cells(2, 3) = "ZJW" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_ZJW"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If
                If Sheets("SOE_Import").Cells(2, 3) = "MKL" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_MKL"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If
                If Sheets("SOE_Import").Cells(2, 3) = "ZMK" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_ZMK"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If
                If Sheets("SOE_Import").Cells(2, 3) = "RKL" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_RKL"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If
                If Sheets("SOE_Import").Cells(2, 3) = "ZRK" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_ZRK"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If


                 If Sheets("SOE_Import").Cells(2, 3) = "YHP" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_YHP"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If
                If Sheets("SOE_Import").Cells(2, 3) = "ZYP" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_ZYP"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If
                If Sheets("SOE_Import").Cells(2, 3) = "PLR" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_PLR"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If
                If Sheets("SOE_Import").Cells(2, 3) = "ZPL" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_ZPL"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If

                If Sheets("SOE_Import").Cells(2, 3) = "CHR" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_CHR"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If
                If Sheets("SOE_Import").Cells(2, 3) = "ZCH" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_ZCH"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If
                If Sheets("SOE_Import").Cells(2, 3) = "VKL" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_VKL"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If
                If Sheets("SOE_Import").Cells(2, 3) = "ZKL" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_ZKL"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If
                If Sheets("SOE_Import").Cells(2, 3) = "VPG" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_VPG"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If
                If Sheets("SOE_Import").Cells(2, 3) = "ZVP" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_ZVP"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If
                 If Sheets("SOE_Import").Cells(2, 3) = "H25" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_H25"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If

                If Sheets("SOE_Import").Cells(2, 3) = "TJR" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_TJR"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If

                 If Sheets("SOE_Import").Cells(2, 3) = "ZTJ" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_ZTJ"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If

                If Sheets("SOE_Import").Cells(2, 3) = "VKN" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_VKN"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If

                 If Sheets("SOE_Import").Cells(2, 3) = "ZVK" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_ZVK"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If

                If Sheets("SOE_Import").Cells(2, 3) = "RES" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_RES"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If

                 If Sheets("SOE_Import").Cells(2, 3) = "ZRE" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_ZRE"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If

                If Sheets("SOE_Import").Cells(2, 3) = "TMM" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_TMM"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If

                 If Sheets("SOE_Import").Cells(2, 3) = "ZTM" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_ZTM"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If

                If Sheets("SOE_Import").Cells(2, 3) = "GIR" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_GIR"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If

                 If Sheets("SOE_Import").Cells(2, 3) = "ZGI" Then
                    TRDcommand = "@AutomationDesk.exe -p ""SOE_Import_ZGI"" -u " & SunUser & " -x " & SunPass
                    Print #file2Write, TRDcommand
                End If

                Print #file2Write, "@echo . "
                Print #file2Write, "@echo .   "
                Print #file2Write, "@echo .   "
                Print #file2Write, "@echo .   "

                Print #file2Write, "@echo Please run Sale_Order_Listing Q&A file to check data"
                Print #file2Write, "Pause"
                Close #file2Write
                'Call Shell(myFileName, vbMinimizedNoFocus)
                 Shell (myFileName)

                'MsgBox "Delete and Re-process TRD are done!!!" & Chr(13) & Chr(13) & "   Please run item #5 (Check whether already import any local BUs data !!!"

            Else
                MsgBox "   There is no Sun user name with password has been entered!!!"

            End If

End Sub

問題是:即使execCmd已經存在,宏也為什么不啟動批處理文件?

問候,納斯魯爾

我總是使用Shell函數運行cmd文件。
我從未聽說過ExecCmd。

 shell(myFileName)

https://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/shell-function

如果您需要VBA代碼來等待cmd完成,則可以使用Wscript.Shell:

Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1

wsh.Run myFileName, windowStyle, waitOnReturn

編輯:

Print #file2Write, "@echo Please run Sale_Order_Listing Q&A file to check data"
Print #file2Write, "Pause"
Close #file2Write
DoEvents ' this line
'Call Shell(myFileName, vbMinimizedNoFocus)
Shell (myFileName)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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