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


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. Чому це відбувається?


1
Ви виключали проблеми з дозволом? Чи працює Excel у тому ж контексті безпеки, що і ви намагаєтеся його в командному рядку? Інша думка .. перенаправляйте вихід з команди, коли вона запущена, можливо, це направить вас у правильному напрямку ... наприклад: Shell "C: \ Windows \ system32 \ cmd / c ftp.exe -s:" & TempScriptFile & ">> D: \ тимчасовий \ Output.txt", vbNormalFocus
BrianC

@BrianC Дякую за коментар Я додав журнал, і тепер я бачу, що при спробі завантаження файлу час з’єднання вийшов. Що може спричинити це?
Спук

Я здогадуюсь, що у вас є клієнтський антивірус / брандмауер, який заважає з'єднанню даних працювати при запуску коду з excel. Спробуйте тимчасово відключити їх і побачити, чи щось зміниться
BrianC
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.