Excel VBA Подождите, пока Shell закончит работу, прежде чем продолжить сценарий

Прямо сейчас у меня есть этот скрипт VBA:

Sub executeFTPBatch(ftpfileName) Call Shell("FTP -i -s:C:\Temp\" & ftpfileName & ".txt") On Error Resume Next Kill (C:\temp\" & ftpfileName & ".txt") End Sub 

Проблема в том, что он убивает текстовый файл до того, как скрипт FTP даже начался. Я видел некоторые коды wsh, но я не был уверен в синтаксисе о том, как его использовать в отношении вызова shell FTP. Если вы можете помочь мне с правильным синтаксисом, я бы очень признателен!

Вместо этого используйте оболочку WScript, затем вы можете проверить статус команды

 Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public Function RunCMD(ByVal strCMD As String) As String 'Runs the provided command Dim wsh As New wshShell Dim cmd As WshExec Dim x As Integer On Error GoTo wshError x = 0 RunCMD = "Error" Set cmd = wsh.Exec(strCMD) Do While cmd.Status = WshRunning Sleep 100 'for 1/10th of a second x = x + 1 If x > 1200 Then 'We've waited 2 minutes so kill it cmd.Terminate MsgBox "Error: Timed Out", vbCritical, "Timed Out" End If Loop RunCMD = cmd.StdOut.ReadAll & cmd.StdErr.ReadAll Exit Function wshError: RunCMD = cmd.StdErr.ReadAll End Function 

Это функция, которую я использую, и она вернет статус команды, включая любые ошибки.

(Почти забыл объявление сна!)

(Изменить 2: вы также захотите включить ссылку на объектную модель хоста Windows Script (wshom.ocx), чтобы вы могли использовать функции Intellisense)

Я предпочел, чтобы омегастрипа предложила:

 Public Sub RunCMD(ByVal strCMD As String) 'Runs the provided command Dim wsh As Object Set wsh = CreateObject("WScript.Shell") Call wsh.Run(strCMD, 2, True) End Sub 

С 2 качестве второго параметра, чтобы избежать всплывающих окон

  • Выполнение VBA из оболочки
  • Как объединить файлы, вызвав Windows Shell с помощью VBA
  • Как довести конечный минус до ведущего минуса в команде tr
  • Как передать несколько переменных из файла Excel в пакетный файл
  • Excel Macro для открытия EXE
  • Замена символов без открытия файла Excel
  • Shell script - конвертировать Excel (xlsx) в CSV - удалить пустое пространство / вкладку
  • Excel VBA запускает команду оболочки на Mac?
  • Excel VBA Shell FTP регистрации
  • Приложение Excel VBA Open с использованием оболочки, затем дождитесь, пока он откроется, чтобы продолжить выполнение команд
  • Как получить изменение сценария с оболочкой, которое будет распознано открытым приложением
  • Давайте будем гением компьютера.