Невозможно загрузить файл на FTP из Excel VBA

1

Мне нужно автоматизировать загрузку файла на FTP-сервер из макроса Excel.

Я следую простым путем создания файла сценария, а затем запускаю FTP.exe с командами из этого файла сценария. Проблема заключается в том, что если FTP.exe выполняется из скрипта VBA, файл загружается неправильно - он создается, но на сервере содержится 0 байт. Но когда я запускаю команду FTP из оболочки (с точно таким же файлом скрипта), файл загружается правильно.

Мой скрипт выглядит следующим образом:

Sub Przycisk1_Klikniecie()

TempScriptFile = "D:\Temporary\ScriptFile.txt"
SourcePath = "(local path)"
SourceFilename = "(local file)"

Set FSO = CreateObject("scripting.filesystemobject")

Open TempScriptFile For Output As #1
Print #1, "open (host)"
Print #1, "(user)"
Print #1, "(password)"
Print #1, "binary"
Print #1, "lcd " & SourcePath
Print #1, "put " & SourceFilename
Print #1, "bye"
Print #1, "exit"
Close #1

If FSO.FolderExists("C:\Windows\System32") = False Then
    Shell "C:\WINNT\system32\cmd /c ftp.exe -s:" & TempScriptFile, vbNormalFocus
Else
    Shell "C:\WINDOWS\system32\cmd /c ftp.exe -s:" & TempScriptFile, vbNormalFocus
End If

Kill TempScriptFile

End Sub

Среда: Windows 10, Microsoft Office 2013.

Примечание: один и тот же скрипт работает на двух разных машинах (Win7 / Office 2007 и Win10 / Office 2016).

Что я делаю неправильно?


Вот журнал с FTP, выполненный из Excel:

ftp> open <host>
Connected to <host>.
220 FTP Server
---> OPTS UTF8 ON
500 OPTS UTF8 not understood

User (<host>:(none)): 
---> USER <user>
331 Password required for <user>

---> PASS <password>
230 User <user> logged in
ftp> lcd <folder>
Local directory now <folder>
ftp> binary
---> TYPE I
200 Type set to I
ftp> put <file>
---> PORT 10,132,8,219,197,121
200 PORT command successful
---> STOR <file>
425 Unable to build data connection: Connection timed out
ftp> bye
---> QUIT
221 Goodbye.

Обратите внимание 425 Unable to build data connection: Connection timed out, Почему это происходит?

Spook
источник
1
Вы исключили проблемы с разрешениями? Excel работает в том же контексте безопасности, что и вы в командной строке? Еще одна мысль ... перенаправить вывод команды при ее запуске, может быть, это укажет вам правильное направление ... например: Shell "C: \ Windows \ system32 \ cmd / c ftp.exe -s:" & amp; TempScriptFile & amp; "& gt; & gt; D: \ Temporary \ Output.txt", vbNormalFocus
BrianC
@BrianC Спасибо за комментарий. Я добавил логирование и теперь вижу, что при попытке загрузить файл время соединения истекло. Что может вызвать это?
Spook
Я предполагаю, что у вас есть клиентский антивирус / брандмауэр, который препятствует работе подключения к данным при запуске кода из Excel. Попробуйте временно отключить их и посмотреть, если что-то изменится
BrianC