VBA Tipp: Internetverzeichnis per FTP anlegen oder löschen

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

  1. Ich möchte ein Internetverzeichnis per FTP anlegen.
  2. Ich möchte ein Internetverzeichnis per FTP löschen.
  • Der Zugang zu dem Verzeichnis erfolgt über das FTP-Protokoll.
  • Für den FTP-Zugang zum Server ist ein Benutzername und ein Passwort erforderlich.

1. Internetverzeichnis anlegen:

  • Das geht mit der folgenden VBA-Funktion, die in einem globalen Modul hinterlegt wird.
  • Es werden alle nicht existierenden Ordner und Unterordner des angegebenen Ordnerpfades (Parameter RemoteOrdnerpfad) angelegt.
  • Es erfolgt keine Rückmeldung, ob die Aktion erfolgreich war oder nicht.
Public Function FTPOrdnerAnlegen(ByVal RemoteOrdnerpfad As String, _
                                 ByVal Server As String, _
                                 ByVal Benutzer As String, _
                                 ByVal Passwort As String _
                                 ) As Boolean
 
 'Late Binding: Kein Verweis auf "Microsoft Scripting Runtime" und
 'kein Verweis auf "Windows Script Host Object Model" notwendig
 'Quelle: www.dbwiki.net oder www.dbwiki.de
 
 Dim FSO          As Object 'IWshRuntimeLibrary.FileSystemObject
 Dim WSH          As Object 'IWshRuntimeLibrary.WshShell (Windows Scripting Host)
 Dim strFTP       As String
 Dim Datei        As Object 'TextStream
 Dim tempDatei    As String
 Dim strOrdner()  As String
 Dim strPfad      As String
 Dim varElement   As Variant
 Const ForWriting = 2
 Const WshHide = 0
 
 Set FSO = CreateObject("Scripting.FileSystemObject")
 Set WSH = CreateObject("WScript.Shell")
 
 If Not Right(RemoteOrdnerpfad, 1) = "/" Then
   RemoteOrdnerpfad = RemoteOrdnerpfad & "/"
 End If
 
 strOrdner() = Split(RemoteOrdnerpfad, "/")
 
 'Der Name der txt-Datei ist egal
 tempDatei = "session.txt"
 Set Datei = FSO.OpenTextFile(tempDatei, ForWriting, True)
 
 With Datei
   .WriteLine "open " & Server
   .WriteLine Benutzer
   .WriteLine Passwort
 
   For Each varElement In strOrdner()
     If Len(varElement) Then
       .WriteLine "mkdir " & varElement
       .WriteLine "cd " & varElement
     End If
   Next varElement
 
   .WriteLine "quit"
   .Close
 End With
 
 strFTP = "%systemroot%\System32\ftp.exe -s:" & tempDatei
 strFTP = WSH.ExpandEnvironmentStrings(strFTP)
 Call WSH.Run(strFTP, WshHide, True)
 
 FSO.DeleteFile tempDatei, True
 
 Set FSO = Nothing
 Set WSH = Nothing
 Set Datei = Nothing
 
End Function

Aufruf

 Dim strServer As String
 Dim strBenutzer As String
 Dim strPasswort As String
 Dim strRelativerPfadRemoteordner As String
 
 strServer = "www.meine-domain.de"
 strBenutzer = "12345678"
 strPasswort = "geheim"
 strRelativerPfadRemoteordner = "htdocs/MeinOrdner/MeinUnterordner"
 
 Call FTPOrdnerAnlegen(strRelativerPfadRemoteordner, strServer, strBenutzer, strPasswort)


2. Internetverzeichnis löschen:

  • Das geht mit der folgenden VBA-Funktion, die in einem globalen Modul hinterlegt wird.
  • Es kann nur ein leerer Ordner gelöscht werden.
  • Es erfolgt keine Rückmeldung, ob die Aktion erfolgreich war oder nicht.
Public Function FTPOrdnerLöschen(ByVal RemoteOrdnerpfad As String, _
                                 ByVal Server As String, _
                                 ByVal Benutzer As String, _
                                 ByVal Passwort As String _
                                 ) As Boolean
 
 'Late Binding: Kein Verweis auf "Microsoft Scripting Runtime" und
 'kein Verweis auf "Windows Script Host Object Model" notwendig
 'Quelle: www.dbwiki.net oder www.dbwiki.de
 
 Dim FSO          As Object 'IWshRuntimeLibrary.FileSystemObject
 Dim WSH          As Object 'IWshRuntimeLibrary.WshShell (Windows Scripting Host)
 Dim strFTP       As String
 Dim Datei        As Object 'TextStream
 Dim tempDatei    As String
 Const ForWriting = 2
 Const WshHide = 0
 
 Set FSO = CreateObject("Scripting.FileSystemObject")
 Set WSH = CreateObject("WScript.Shell")
 
 'Der Name der txt-Datei ist egal
 tempDatei = "session.txt"
 Set Datei = FSO.OpenTextFile(tempDatei, ForWriting, True)
 
 With Datei
   .WriteLine "open " & Server
   .WriteLine Benutzer
   .WriteLine Passwort
   .WriteLine "rmdir " & RemoteOrdnerpfad
   .WriteLine "quit"
   .Close
 End With
 
 strFTP = "%systemroot%\System32\ftp.exe -s:" & tempDatei
 strFTP = WSH.ExpandEnvironmentStrings(strFTP)
 Call WSH.Run(strFTP, WshHide, True)
 
 FSO.DeleteFile tempDatei, True
 
 Set FSO = Nothing
 Set WSH = Nothing
 Set Datei = Nothing
 
End Function

Aufruf

 Dim strServer As String
 Dim strBenutzer As String
 Dim strPasswort As String
 Dim strRelativerPfadRemoteordner As String
 
 strServer = "www.meine-domain.de"
 strBenutzer = "12345678"
 strPasswort = "geheim"
 strRelativerPfadRemoteordner = "htdocs/MeinOrdner/MeinUnterordner"
 
 Call FTPOrdnerLöschen(strRelativerPfadRemoteordner, strServer, strBenutzer, strPasswort)


Web-Links