从excel 2010中的VBA调用批处理文件

时间:2015-08-27 20:49:22

标签: vba batch-file

我正在尝试使用以下.bat来调用VBA文件:但是我会在Method Run of object IWshShell3 failed中突出显示星号中的行。我不熟悉这个错误,不知道从哪里开始。我在excel 2010中运行VB。谢谢你:)。

    Dim PathCrnt As String
    Dim wsh As Object

    PathCrnt = ActiveWorkbook.Path & "\" & MyBarCode & "_" & MyScan
    Set wsh = VBA.CreateObject("WScript.Shell")
    Dim waitOnReturn As Boolean: waitOnReturn = True
    Dim windowStyle As Integer: windowStyle = 1
    **wsh.Run "C:\Users\cmccabe\Desktop\NxClinical.bat", windowStyle, waitOnReturn**
End If

修改

代码运行但退出时出现错误代码1.基本上,我要做的是让用户输入条形码和日期,这些值用于将目录更改为。调用批处理文件,该文件在该目录上运行perl脚本。批处理文件没有被调用,我不知道为什么。谢谢你:)。

VBA

Private Sub CommandButton3_Click()

Dim MyBarCode   As String      ' Enter Barcode
Dim MyScan      As String      ' Enter ScanDate
Dim MyDirectory As String

MyBarCode = Application.InputBox("Please enter the barcode", "Bar Code", Type:=2)
If MyBarCode = "False" Then Exit Sub   'user canceled
Do
    MyScan = Application.InputBox("Please enter scan date", "Scan Date", Date, Type:=2)
    If MyScan = "False" Then Exit Sub   'user canceled
    If IsDate(MyScan) Then Exit Do
    MsgBox "Please enter a valid date format. ", vbExclamation, "Invalid Date Entry"
Loop

Range("B20").Value = MyBarCode
Range("B21").Value = CDate(MyScan)

MyDirectory = "N:\1_DATA\MicroArray\NexusData\" & MyBarCode & "_" & Format(CDate(MyScan), "m-d-yyyy") & "\"
' Create nexus directory and folder
If Dir(MyDirectory, vbDirectory) = "" Then MkDir MyDirectory

If MsgBox("The project file has been created. " & _
          "Do you want to create a template for analysis now?", _
          vbQuestion + vbYesNo) = vbYes Then

    'Write to text file
    Open MyDirectory & "sample_descriptor.txt" For Output As #1
    Print #1, "Experiment Sample" & vbTab & "Control Sample" & vbTab & "Display Name" & vbTab & "Gender" & vbTab & "Control Gender" & vbTab & "Spikein" & vbTab & "SpikeIn Location" & vbTab & "Barcode"
    Print #1, MyBarCode & "_532Block1.txt" & vbTab & MyBarCode & "_635Block1.txt" & vbTab & ActiveSheet.Range("B8").Value & " " & ActiveSheet.Range("B9").Value & vbTab & ActiveSheet.Range("B10").Value & vbTab & ActiveSheet.Range("B5").Value & vbTab & ActiveSheet.Range("B11").Value & vbTab & ActiveSheet.Range("B12").Value & vbTab & ActiveSheet.Range("B20").Value
    Print #1, MyBarCode & "_532Block2.txt" & vbTab & MyBarCode & "_635Block2.txt" & vbTab & ActiveSheet.Range("C8").Value & " " & ActiveSheet.Range("C9").Value & vbTab & ActiveSheet.Range("C10").Value & vbTab & ActiveSheet.Range("C5").Value & vbTab & ActiveSheet.Range("C11").Value & vbTab & ActiveSheet.Range("C12").Value & vbTab & ActiveSheet.Range("B20").Value
    Print #1, MyBarCode & "_532Block3.txt" & vbTab & MyBarCode & "_635Block3.txt" & vbTab & ActiveSheet.Range("D8").Value & " " & ActiveSheet.Range("D9").Value & vbTab & ActiveSheet.Range("D10").Value & vbTab & ActiveSheet.Range("D5").Value & vbTab & ActiveSheet.Range("D11").Value & vbTab & ActiveSheet.Range("D12").Value & vbTab & ActiveSheet.Range("B20").Value
    Print #1, MyBarCode & "_532Block4.txt" & vbTab & MyBarCode & "_635Block4.txt" & vbTab & ActiveSheet.Range("E8").Value & " " & ActiveSheet.Range("E9").Value & vbTab & ActiveSheet.Range("E10").Value & vbTab & ActiveSheet.Range("E5").Value & vbTab & ActiveSheet.Range("E11").Value & vbTab & ActiveSheet.Range("E12").Value & vbTab & ActiveSheet.Range("B20").Value
    Close #1

    'Run ImaGene
    If MsgBox("Please run the ImaGene analysis. " & _
          "and click yes after it completes to verify the spike-ins.", _
          vbQuestion + vbYesNo) = vbYes Then

    'Update folder structure and call perl
    Dim PathCrnt As String
    Dim Wsh As Object
    Dim WaitOnReturn As Boolean
    Dim WindowStyle As Integer

    PathCrnt = MyDirectory
    Set Wsh = VBA.CreateObject("WScript.Shell")
    WaitOnReturn = True
    WindowStyle = 1

    Wsh.Run PathCrnt & "C:\Users\cmccabe\Desktop\NxClinical.bat", WindowStyle, WaitOnReturn

End If
Else
    MsgBox "Nothing has been done. ", vbExclamation, "Goodbye!"
End If

Application.DisplayAlerts = False
Application.Quit

End Sub

1 个答案:

答案 0 :(得分:1)

Dim PathCrnt As String
Dim wsh As Object

PathCrnt = ActiveWorkbook.Path & "\" & MyBarCode & "_" & MyScan
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1
Dim errrCode As Long

errrCode = wsh.Run( "cmd /C ""C:\Users\cmccabe\Desktop\NxClinical.bat""" _
     , windowStyle, waitOnReturn)

If errrCode = 0 Then
    MsgBox "Done! No error to report."
Else
    MsgBox "Program exited with error code " & errrCode & "."
End If

请注意

  • 明确运行cmd /c;
  • 用双引号括起批处理脚本(完全限定)名称;
  • 从被调用的批处理脚本中获取(并处理)errrCode

如果您的批处理脚本需要paramer,请按如下方式使用它们(例如):

errrCode = wsh.Run( "cmd /C ""C:\Users\cmccabe\Desktop\NxClinical.bat"" par1 ""par 2""" _
    , windowStyle, waitOnReturn)

另一个例子:

errrCode = wsh.Run( "cmd /C ""C:\Users\cmccabe\Desktop\NxClinical.bat"" " _
   _ & """" & PathCrnt & """" , windowStyle, waitOnReturn)