[英]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.