[Excel VBA] Datei Abfrage aus externem Pfad

  • Excel

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Blaupunkt79.

    [Excel VBA] Datei Abfrage aus externem Pfad

    Hallo Zusammen,

    ich möchte aus einem externen FTP Pfad abfragen, ob eine Datei vorhanden ist.

    Das ganze hat den Hintergrund, dass ich, falls eine Datei vorhanden ist, ein Update einspielen möchte.

    Das Problem ist, dass ich bei der Dateiabfrage bereits eine Fehlermeldung bekomme, deshalb die Frage, wie kann ich aus einem externen Pfad Dateien abfragen?

    Gruß
    Unabhängig davon das FTP ein unsicheres Protokoll ist, lässt es sich über VBA bescheiden verwenden.
    Hier ist ein Beispiel für ein FTP Klasse (mit WIN API):
    office-loesung.de/ftopic400253_0_0_asc.php


    Empfehlen würde ich dir das über HTTPS zu machen.

    LG
    Das ist meine Signatur und sie wird wunderbar sein!
    Muß den Thread nochmals hochholen.

    Ich habe jetzt mal aus Deinem Link die Daten eingefügt, er zeigt mir zwar "OK" an, aber ich finde die Datei nicht auf meinem FTP Server (NAS). Scheint wohl Probleme mit dem Ordner zu haben, gebe ich ein falsches pw ein, so meckert er, dass scheint also zu funktionieren. Jemand einen Rat?

    VB.NET-Quellcode

    1. Option Explicit
    2. Const FtpIP = "XXX" ==> kann ich hier auch eine no-ip Adresse eintragen?
    3. Const FtpUser = "XXX"
    4. Const FtpPwd = "XXX"
    5. Const FtpDir = "/Upload"
    6. Private Sub CommandButton1_Click()
    7. Dim WS As Worksheet
    8. Set WS = Worksheets.Add
    9. WS.Cells(1, 1) = "Das ist ein Test"
    10. WS.Move
    11. ActiveWorkbook.SaveAs "C:\Users\Admin\Desktop\FTPUploadTest.xls"
    12. If SaveToFTP(ActiveWorkbook.FullName) Then
    13. MsgBox "OK"
    14. Else
    15. MsgBox "Nicht OK!"
    16. End If
    17. ActiveWorkbook.Close
    18. End Sub
    19. Function SaveToFTP(FileName As String) As Boolean
    20. Dim myFtp As clsFtp
    21. Dim col As Collection
    22. Dim varItem As Variant
    23. Dim ErrorStr As String
    24. Set myFtp = New clsFtp
    25. If myFtp.Connect(FtpIP, FtpUser, FtpPwd) Then
    26. myFtp.SetCurrentDirectory FtpDir
    27. myFtp.PutFile FileName, Split(FileName, "\")(UBound(Split(FileName, "\")))
    28. ErrorStr = myFtp.GetLastError
    29. If ErrorStr = "" Then
    30. SaveToFTP = True
    31. End If
    32. myFtp.DisConnect
    33. End If
    34. Set myFtp = Nothing
    35. End Function
    Mittlerweile habe ich es hinbekommen, dass meine Excel Datei per FTP abfragt, ob auf dem FTP eine "update.txt" vorhanden ist. Ist diese vorhanden, wird der Inhalt anlysiert. Das funktioniert auch soweit, aber ... wenn ich auf dem FTP den Dateinamen von "update.txt" auf "update1.txt" abändere, aktualisiert Excel das nicht, bedeutet, er findet immer noch die "update.txt", die ja eigentlich nicht mehr vorhanden ist. Starte ich Excel neu und teste wieder, dann funktioniert es und es kommt als Meldung "Kein Update verfügbar".

    Muß ich Excel bzw. diese Routine irgendwie resetten? Passive Mode ist beim FTP im Excel eingestellt.

    Was mir beim auslesen, des Fehlercodes der Routine aufgefallen ist, dass beim ersten Aufruf mit Excel, wenn alles stimmt, folgendes erscheint: "226 Transfer complete", soweit nachvollziehbar, beim zweiten Aufruf erscheint nichts mehr, ErrorStr ist quasi leer, tritt ein Fehler auf, so erscheint der Fehlercode bei jedem Aufruf, dass passt auch soweit.

    Hier mal der Code: (die Zugangsdaten etc. passen, stehen nur weiter oben im Code und sind uninteressant ;) )

    VB.NET-Quellcode

    1. Private Sub Label25_Click()
    2. Dim myFtp As clsFtp, col As Collection, varItem As Variant
    3. Dim ErrorStr As String
    4. Dim Test As String
    5. Dim p As String
    6. Dim a As String
    7. Dim s As String
    8. Dim b As String
    9. Dim strPfad9 As String
    10. Dim datei As String
    11. strPfad9 = CurDir & "\update.txt"
    12. Set myFtp = New clsFtp
    13. If myFtp.Connect(FtpIP, FtpUser, FtpPwd) Then GoTo richtig1
    14. MsgBox ("Keine Verbindung!"): GoTo zuende
    15. richtig1:
    16. myFtp.SetCurrentDirectory FtpDir
    17. myFtp.GetFile "update.txt", strPfad9, False
    18. ErrorStr = myFtp.GetLastError
    19. If ErrorStr = "" Then GoTo richtig2
    20. p = InStr(ErrorStr, " ")
    21. If p > 0 Then a = Mid(ErrorStr, 1, p - 1): b = Mid(ErrorStr, p + 1, Len(ErrorStr))
    22. If a = "226" Then GoTo richtig2
    23. MsgBox ("Kein Update verfügbar!"): GoTo zuende1
    24. richtig2:
    25. myFtp.DisConnect
    26. Set myFtp = Nothing
    27. datei = strPfad9
    28. Open datei For Input As #1
    29. Do While Not EOF(1)
    30. Line Input #1, s
    31. p = InStr(s, " ")
    32. If p > 0 Then
    33. a = Mid(s, 1, p - 1)
    34. b = Mid(s, p + 1, Len(s))
    35. If a = "#U1" Then GoTo richtig3
    36. If a = "Kein" Then GoTo zuende11
    37. End If
    38. zuende11:
    39. Loop
    40. Close #1
    41. MsgBox ("Kein Update verfügbar!"): GoTo zuende
    42. richtig3:
    43. Close #1
    44. Unload start9
    45. Load Neuigkeiten
    46. Neuigkeiten.Show
    47. GoTo zuende9
    48. zuende1:
    49. myFtp.DisConnect
    50. zuende:
    51. Set myFtp = Nothing
    52. Unload start9
    53. Load start9
    54. start9.Show
    55. zuende9:
    56. End Sub