Автоматизация загрузки по FTP с VBA - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь автоматизировать следующий процесс:

  1. Данные, импортированные в Microsoft Excel (myfile.xls) из базы данных и отформатированные.
  2. Файл сохранен как myfile.txt.
  3. Загружен через FTP на сервер.

Я получил до FTP загрузки, но у меня возникли проблемы с пакетным файлом, созданным в VBAscript.

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

Dim MY_FILENAME As String
MY_FILENAME = "C:\user\sam\test" & "filename" & Format(CStr(Now), "yyyy_mm_dd_hh_mm") & ".BAT"


Dim FileNumber As Integer
Dim retVal As Variant

FileNumber = FreeFile

'create batch file
Open MY_FILENAME For Output As #FileNumber
Print #FileNumber, "FTP 00.0.000.000"
Print #FileNumber, "username"
Print #FileNumber, "password"
Print #FileNumber, "ascii crlf"
Print #FileNumber, "put  " myfile.txt; "  'location'"
Print #FileNumber, "exit"
Close #FileNumber

'run batch file
retVal = Shell(MY_FILENAME, vbNormalFocus)

Когда я запускаю этот скрипт, он открывает IP-адрес, связанный с сервером, но не может ввести учетные данные для входа.Кто-нибудь может посоветовать, где я не так?

1 Ответ

0 голосов
/ 27 ноября 2018

Что не так, так это то, что командный файл сначала открывается ftp в интерактивном режиме и не получает ввода.Если ftp woud завершится сам по себе, вы заметите, что ваш пакетный файл затем продолжает выполнять инструкции username, password и т. Д. Они предназначены не для инструкций для Batch, а для ftp, ноэто не то, как Batch будет это видеть.

Чтобы обойти это, сохраните все инструкции ftp во втором файле, а затем вызовите ftp в Batch со вторым файлом в качестве входного параметра:

Dim FileNumber As Integer
Dim retVal As Variant
FileNumber = FreeFile

'create batch file
Open MY_FILENAME For Output As #FileNumber
Print #FileNumber, "FTP -s<your-filename-here> 00.0.000.000"
Close #FileNumber

Open FTP_INSTRUCTIONS For Output As #FileNumber
Print #FileNumber, "username"
Print #FileNumber, "password"
Print #FileNumber, "ascii crlf"
Print #FileNumber, "put  " myfile.txt; "  'location'"
Print #FileNumber, "exit"
Close #FileNumber

'run batch file
retVal = Shell(MY_FILENAME, vbNormalFocus)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...