我总是使用Shell函数来运行cmd文件。我从未听说过ExecCmd。
早期注意:我不使用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)
我总是使用Shell函数来运行cmd文件。我从未听说过ExecCmd。