Я пишу макрос, который должен:
- Запустить файл .bat
- Дождаться завершения файла .bat (данные загружаются из Oracle в .csv через SQLcl)
- Продолжить выполнение оставшейся части VBA
Я нашел два решения этой проблемы:
Первое - через оболочку:
Dim shell_command As String
shell_command = ".bat_file_location"
Call Shell(shell_command, vbNormalFocus)
, который открывает файл .bat, но окно немедленно закрывается и ничего не выполняется.
Второй - через Windows Объект сценария хоста:
Dim strCommand As String
Dim lngErrorCode As Long
Dim wsh As WshShell
Set wsh = New WshShell
strCommand = Chr(34) & _
".bat_file_location" & _
Chr(34)
lngErrorCode = wsh.Run(strCommand, _
WindowStyle:=0, _
waitonreturn:=True)
If lngErrorCode <> 0 Then
MsgBox "Uh oh! Something went wrong with .bat file!"
Exit Sub
End If
Set wsh = Nothing
эта опция не работает ( lngErrorCode = 0) и я не совсем понимаю, почему. Я использую тот же метод для других файлов .bat, которые загружают данные через BTEQ из базы данных Teradata, поэтому я предполагаю, что база данных SQLcl / Oracle не хочет работать с этим методом.
Есть ли у вас какие-нибудь идеи, как преодолеть это?
.bat код файла:
sql user/password@//hostname:port/servicename @"path\code.sql"
Любые советы будут высоко ценится. Привет.