title: excel vba upload file to ftp server
body: <p>I am using the following script in excel to try and upload a text file to my server. For some reason my script is failing.</p>
  
  <p>Please can someone show me where I am going wrong? all the login details are correct and my ftp server address is correct. Not sure why it won't work?</p>
  
  <p>I have the script placed in a module and have the module assigned to a active x button control</p>
  
  <pre><code>'Open the Internet object
   Private Declare Function InternetOpen _
     Lib "wininet.dll" _
       Alias "InternetOpenA" _
         (ByVal sAgent As String, _
          ByVal lAccessType As Long, _
          ByVal sProxyName As String, _
          ByVal sProxyBypass As String, _
          ByVal lFlags As Long) As Long
  
  'Connect to the network
   Private 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 lService As Long, _
          ByVal lFlags As Long, _
          ByVal lContext As Long) As Long
  
  'Get a file using FTP
   Private Declare Function FtpGetFile _
     Lib "wininet.dll" _
       Alias "FtpGetFileA" _
         (ByVal hFtpSession As Long, _
          ByVal lpszRemoteFile As String, _
          ByVal lpszNewFile As String, _
          ByVal fFailIfExists As Boolean, _
          ByVal dwFlagsAndAttributes As Long, _
          ByVal dwFlags As Long, _
          ByVal dwContext As Long) As Boolean
  
  'Send a file using FTP
   Private Declare Function FtpPutFile _
     Lib "wininet.dll" _
       Alias "FtpPutFileA" _
         (ByVal hFtpSession As Long, _
          ByVal lpszLocalFile As String, _
          ByVal lpszRemoteFile As String, _
          ByVal dwFlags As Long, _
          ByVal dwContext As Long) As Boolean
  
  'Close the Internet object
   Private Declare Function InternetCloseHandle _
     Lib "wininet.dll" _
       (ByVal hInet As Long) As Integer
  
  Sub UploadFTP()
  
    Dim hostFile As String
    Dim INet As Long
    Dim INetConn As Long
    Dim Password As String
    Dim RetVal As Long
    Dim ServerName As String
    Dim Success As Long
    Dim UserName As String
  
    Const ASCII_TRANSFER = 1
    Const BINARY_TRANSFER = 2
  
      ServerName = "***"
      UserName = "****"
      Password = "***"
      localFile = "P:\TEST.txt"
      hostFile = "/public_html/TEST.txt"
  
        RetVal = False
        INet = InternetOpen("MyFTP Control", 1&amp;, vbNullString, vbNullString, 0&amp;)
          If INet &gt; 0 Then
            INetConn = InternetConnect(INet, ServerName, 0&amp;, UserName, Password, 1&amp;, 0&amp;, 0&amp;)
              If INetConn &gt; 0 Then
                Success = FtpPutFile(INetConn, localFile, hostFile, BINARY_TRANSFER, 0&amp;)
                RetVal = InternetCloseHandle(INetConn)
              End If
           RetVal = InternetCloseHandle(INet)
          End If
  
        If Success &lt;&gt; 0 Then
          MsgBox ("Upload process completed")
        Else
          MsgBox "FTP File Error!"
        End If
  
  End Sub
  </code></pre>