Страницы: 1
RSS
Получение данных с FTP c помощью VBA
 
Добрый день.
Условие: необходимо забрать с ftp файл, расположенный в корне.
Код
Private Const FTP_TRANSFER_TYPE_UNKNOWN     As Long = 0
Private Const INTERNET_FLAG_RELOAD          As Long = &H80000000
 
Private Declare Function InternetOpenA Lib "wininet.dll" ( _
    ByVal sAgent As String, _
    ByVal lAccessType As Long, _
    ByVal sProxyName As String, _
    ByVal sProxyBypass As String, _
    ByVal lFlags As Long) As Long
 
Private Declare Function InternetConnectA Lib "wininet.dll" ( _
    ByVal hInternetSession As Long, _
    ByVal sServerName As String, _
    ByVal nServerPort As Long, _
    ByVal sUsername As String, _
    ByVal sPassword As String, _
    ByVal lService As Long, _
    ByVal lFlags As Long, _
    ByVal lContext As Long) As Long
 
Private Declare Function FtpGetFileA Lib "wininet" ( _
    ByVal hConnect As Long, _
    ByVal lpszRemoteFile As String, _
    ByVal lpszNewFile As String, _
    ByVal fFailIfExists As Long, _
    ByVal dwFlagsAndAttributes As Long, _
    ByVal dwFlags As Long, _
    ByVal dwContext As Long) As Long
    
Private Declare Function InternetCloseHandle Lib "wininet" ( _
    ByVal hInet As Long) As Long
 
Sub FtpDownload(ByVal strRemoteFile As String, ByVal strLocalFile As String, ByVal strHost As String, ByVal lngPort As Long, ByVal strUser As String, ByVal strPass As String)
    Dim hOpen   As Long
    Dim hConn   As Long
 
    hOpen = InternetOpenA("FTPGET", 1, vbNullString, vbNullString, 1)
    hConn = InternetConnectA(hOpen, strHost, lngPort, strUser, strPass, 1, 0, 2)
 
    If FtpGetFileA(hConn, strRemoteFile, strLocalFile, 1, 0, FTP_TRANSFER_TYPE_UNKNOWN Or INTERNET_FLAG_RELOAD, 0) Then
        Debug.Print "Success"
    Else
        Debug.Print "Fail"
    End If
 
    'Close connections
    InternetCloseHandle hConn
    InternetCloseHandle hOpen
End Sub

Sub TestDownload()
    localFolder = "C:\rr.txt"
    HostName = "91.122.30.115"
    port = 21
    Username = ""
    Password = ""
    remoteMatchFile = "robots.txt"
   FtpDownload remoteMatchFile, localFolder, HostName, 21, Username, Password
End Sub
С сервером коннектится, однако файл не хочет забирать.

Безусловно, существует 1https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=54581http://www.codenet.ru/progr/vbasic/ftp.php5https://www.ozgrid.com/forum/index.php?thread/122540-how-to-use-vba-ftp-to-download-newest-file-in-directory/https://www.mrexcel.com/board/threads/download-files-from-ftp-server-using-excel-vba-script.1037043/ вопросов по данной теме(только на этом форуме 4 страницы в поисковой выдаче),
Но ступор какой то.

Что я не так делаю?
 
Цитата
heso написал:
файл не хочет забирать
так и пишет - не хочу забирать? Или есть более подробное описание проблемы? Ошибка какая-то появляется?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков,
Код
FtpGetFileA(hConn, strRemoteFile, strLocalFile, 1, 0, FTP_TRANSFER_TYPE_UNKNOWN Or INTERNET_FLAG_RELOAD, 0)
возвращает 0.

Уже перепробовал и
remoteMatchFile = "/robots.txt"
remoteMatchFile = "//robots.txt"
remoteMatchFile = ":/robots.txt"
 
А доступ к папке 777?
Да и остального пути не видать(откуда качать). Это для Вас корень, а для FTP могут быть папки более верхнего уровня. Отсылка на сайт, например.
Изменено: Дмитрий(The_Prist) Щербаков - 24.01.2020 14:01:15
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков,

FTP:
Код
HostName = "91.122.30.115"
Руками все спокойно выкачивается. Через shell тоже.
Хочу просто из корня скачать robots.txt.
Изменено: heso - 24.01.2020 14:07:05
 
Цитата
heso написал:
Руками все спокойно выкачивается
как записываете руками и куда? В браузер или в ftp клиент?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
heso написал:
Через shell тоже
Что под этим подразумевается? Такое?
Код
Set objShell = CreateObject("Shell.Application") 
Set FromFolder = objShell.NameSpace("ftp://" & UserLog & ":" & UserPass & "@" & FtpURL) 
Set DestFolder = objShell.NameSpace(DestPath) 
Set objItem = FromFolder.ParseName(GetFile) 
DestFolder.CopyHere objItem.path, 16 
По вопросам из тем форума, личку не читаю.
 
БМВ, да.
Дмитрий(The_Prist) Щербаков, в браузере, руками нажимаю скачать - качается. через VBA не хочет.
 
Из #8 логически вытекает, что код Михаила из #7 не написан на VBA. :)  
Владимир
 
Цитата
sokol92 написал:
не написан на VBA
VBS  :D
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх