Excel 2013中的VBA-启动批处理文件

问题描述 投票:0回答:1

早期注意:我不使用VBA编写代码,但我基于编程逻辑对此有所了解。

我从我们部门的一个部门收到了一份文档,该宏基本上可以完成三件事。

1)在临时文件夹中创建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已经存在,宏也为什么不启动批处理文件?

关于,Nasrul

早期注意:我不使用VBA编写代码,我基于编程逻辑对此有所了解。我从我们部门的一个部门收到了一份文件,该宏基本上可以完成3件事。 1)创建xml文件...

我总是使用Shell函数来运行cmd文件。我从未听说过ExecCmd。

 shell(myFileName)

https://docs.microsoft.com/en-us/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)
excel vba
1个回答
1
投票

我总是使用Shell函数来运行cmd文件。我从未听说过ExecCmd。

© www.soinside.com 2019 - 2024. All rights reserved.