Dateien aus VBA auf einen FTP-Server hochladen
VBA
Die Skriptsprache VBA (Visual Basic for Applications) ist aus dem von Microsoft entwickelten BASIC-Dialekt Visual Basic abgeleitet und erleichtert die Ablaufsteuerung innerhalb von Microsoft-Office-Produkte.
Voraussetzungen
Als erstes muss dem VBA-Projekt ein Verweis auf die Datei "MSINET.OCX" (Microsoft Internet Transfer Control) hinzugefügt werden. Die benötigte Datei befindet sich i.d.R. in den folgenden Verzeichnissen:
- x86: C:\Windows\system32\
- x64: C:\Windows\SysWOW64\
Dieses Steuerelement stellt die Basis für sämtliche Internet-Kommunikation zur Verfügung. In unserem Beispiel konzentrieren wir uns hier auf das Hochladen einer Datei zu einem FTP-Server.
Hochladen einer Datei zum FTP-Server
Function FTP_Upload_File(QuellDatei As String, ZielDatei As String, FTPServer As String, FTPBenutzer As String, FTPKennwort As String) As Long Dim FTP As Inet Dim ExecString As String On Local Error GoTo FuncExit '----------------------------------------------------------------------- ' Verbindungsaufbau '----------------------------------------------------------------------- Set FTP = New Inet With FTP .Protocol = icFTP .RemoteHost = FTPServer .Username = FTPBenutzer .Password = FTPKennwort '------------------------------------------------------------------- ' Upload '------------------------------------------------------------------- ExecString = "put " & Chr(34) & QuellDatei & Chr(34) & " " & Chr(34) & ZielDatei & Chr(34) .Execute .URL, ExecString Do While .StillExecuting DoEvents Loop End With FuncExit: FTP_Upload_File = FTP.ResponseCode Set FTP = Nothing End Function
Aufruf der Funktion
Die Funktion ist aufgrund der Übergabeparameter so aufgebaut, dass Sie problemlos für verschiedene Dateien und/oder FTP-Server verwendet werden kann.
Response = FTP_Upload_File("C:\TEMP\upload.txt","/FTP_Verzeichnis/upload.txt","ftp.meinftpserver.tld","Benutzername","Kennwort")
Rückgabewerte (Response Codes)
Nachfolgend eine Übersicht der gebräuchlichsten Response-Codes anhand deren bei Bedarf ein Fehlermanagement oder eine Statusanzeige implementiert werden kann.
- 0 (icNone) - No current state
- 1 (icResolvingHost) - The remote address given is currently being checked
- 2 (icHostResolved) - The remote address given has been accepted
- 3 (icConnecting) - Connecting
- 4 (icConnected) - Connected
- 5 (icRequesting) - Data is currently being requested
- 6 (icRequestSent) - A data request has been sent
- 7 (icReceivingResponse) - A response is current being received
- 8 (icResponseReceived) - A response has been received
- 9 (icDisconnecting) - Disconnecting
- 10 (icDisconnected) - Disconnected
- 11 (icError) - An error has occurred
- 12 (icResponseCompleted) - A response was successfully completed
In einem weiteren Tipp behandeln wir die umgekehrte Richtung, den Download