Try this It uses the internet controls, but with late binding and api's:
Option Explicit
Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" ( _
ByVal hFtpSession 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
Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" ( _
ByVal sAgent As String, _
ByVal nAccessType As Long, _
ByVal sProxyName As String, _
ByVal sProxyBypass As String, _
ByVal nFlags As Long) As Long
Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" ( _
ByVal hInternetSession As Long, _
ByVal sServerName As String, _
ByVal nServerPort As Integer, _
ByVal sUsername As String, _
ByVal sPassword As String, _
ByVal nService As Long, _
ByVal dwFlags As Long, _
ByVal dwContext As Long) As Long
Declare Function InternetCloseHandle Lib "wininet.dll" ( _
ByVal hInet As Long) As Integer
Type udtFtpInfo
USER_ID As String
PASSWORD As String
MAINFRAME_ADDRESS As String
MAINFRAME_FILE_NAME As String
PC_FILE_NAME As String
End Type
Function fnGetFile(ftpInfo As udtFtpInfo) As Integer
Dim hlINetSession As Long
Dim hlSession As Long
With ftpInfo
hlINetSession = InternetOpen("MyFTPClient", 1, "", "", 0)
hlSession = InternetConnect(hlINetSession, .MAINFRAME_ADDRESS, False, .USER_ID, .PASSWORD, 1, 0, 0)
fnGetFile = FtpGetFile(hlSession, .MAINFRAME_FILE_NAME, .PC_FILE_NAME, False, &H80000000, &H1, 0)
Call InternetCloseHandle(hlSession)
Call InternetCloseHandle(hlINetSession)
End With
End Function
Sub Main()
Dim ftpInfo As udtFtpInfo
With ftpInfo
.MAINFRAME_ADDRESS = "sysc.servername.com"
.USER_ID = "userid"
.PASSWORD = "password"
.MAINFRAME_FILE_NAME = "'full.dataset.name'"
.PC_FILE_NAME = "c:\results.txt"
End With
Call fnGetFile(ftpInfo)
End Sub