VBA Macro - For Each fájl letöltés
2020-03-04T14:55:24+01:00
2020-03-05T10:43:27+01:00
2022-08-19T01:12:06+02:00
Nerich
Sziasztok!

Adott pár link és az útvonalak és a linkeken lévő exceleket szeretném letölteni, de valamiért csak az első tölti le 12x :(

Mi lehet a gond?

Azt írja: Run-time error '3001':
Az argumentumok nem megfelelő típusúak, az elfogadható tartományon kívül esnek vagy ellenmondásosak.

Sub Letoltes_Ciklus() Dim links(1 To 14) As String Dim files(1 To 14) As String Dim link As Variant Dim file As Variant Dim WinHttpReq As Object Dim oStream As Object links(1) = "https://pic01.ingatlannet.hu/xlsx/statisztika/statisztika_3201.xlsx": links(2) = "https://pic01.ingatlannet.hu/xlsx/statisztika/statisztika_3202.xlsx": links(3) = "https://pic01.ingatlannet.hu/xlsx/statisztika/statisztika_3203.xlsx": links(4) = "https://pic01.ingatlannet.hu/xlsx/statisztika/statisztika_3204.xlsx": links(5) = "https://pic01.ingatlannet.hu/xlsx/statisztika/statisztika_3205.xlsx": links(6) = "https://pic01.ingatlannet.hu/xlsx/statisztika/statisztika_3206.xlsx": links(7) = "https://pic01.ingatlannet.hu/xlsx/statisztika/statisztika_3206.xlsx": links(8) = "https://pic01.ingatlannet.hu/xlsx/statisztika/statisztika_3208.xlsx": links(9) = "https://pic01.ingatlannet.hu/xlsx/statisztika/statisztika_3209.xlsx": links(10) = "https://pic01.ingatlannet.hu/xlsx/statisztika/statisztika_3210.xlsx": links(11) = "https://pic01.ingatlannet.hu/xlsx/statisztika/statisztika_3211.xlsx": links(12) = "https://pic01.ingatlannet.hu/xlsx/statisztika/statisztika_3212.xlsx": links(13) = "https://pic01.ingatlannet.hu/xlsx/statisztika/statisztika_3213.xlsx": links(14) = "https://pic01.ingatlannet.hu/xlsx/statisztika/statisztika_3214.xlsx" files(1) = "H:\Ingatlan Excel\Budapest01.xlsx": files(2) = "H:\Ingatlan Excel\Budapest02.xlsx": files(3) = "H:\Ingatlan Excel\Budapest03.xlsx": files(4) = "H:\Ingatlan Excel\Budapest04.xlsx": files(5) = "H:\Ingatlan Excel\Budapest05.xlsx": files(6) = "H:\Ingatlan Excel\Budapest06.xlsx": files(7) = "H:\Ingatlan Excel\Budapest07.xlsx": files(8) = "H:\Ingatlan Excel\Budapest08.xlsx": files(9) = "H:\Ingatlan Excel\Budapest09.xlsx": files(10) = "H:\Ingatlan Excel\Budapest10.xlsx": files(11) = "H:\Ingatlan Excel\Budapest11.xlsx": files(11) = "H:\Ingatlan Excel\Budapest12.xlsx": files(13) = "H:\Ingatlan Excel\Budapest13.xlsx": files(14) = "H:\Ingatlan Excel\Budapest14.xlsx" For Each link In links Set WinHttpReq = CreateObject("Microsoft.XMLHTTP") WinHttpReq.Open "GET", link, False, "", "" '("username", "password") WinHttpReq.send For Each file In files If WinHttpReq.Status = 200 Then Set oStream = CreateObject("ADODB.Stream") oStream.Open oStream.Type = 1 oStream.Write WinHttpReq.responseBody oStream.SaveToFile file, 2 ' 1 = no overwrite, 2 = overwrite oStream.Close End If Next Next End Sub
Mutasd a teljes hozzászólást!
Szia!

A két For Each ciklusod szépen felülírja egymást. Mivel egy linkhez csak egy fájl tartozik, ezért nem For Each ciklus kell, hanem egy sima For  Next.
Pl: Dim xx As Byte
For xx=1 to 14
link = links(xx)
....

file=files(xx)
----

Next
Ezáltal minden linkhez a megfelelő fájlok fognak kapcsolódni.

Üdv.
Mutasd a teljes hozzászólást!

  • Szerintem kelene egy változó, és azt növelned Pl i=1, majd a Next előtt i=i+1, és a fájl nevet is ugrasztani.
    Mutasd a teljes hozzászólást!
  • Közben észrevettem, hogy kétszer volt a 11-es fájl, ez miatt akadt be, de most az utolsó fájlt tölti le 14x

    Ezt a változó témát nem nagyon értem miért kellene... :/ :(
    Mutasd a teljes hozzászólást!
  • Szia!

    A két For Each ciklusod szépen felülírja egymást. Mivel egy linkhez csak egy fájl tartozik, ezért nem For Each ciklus kell, hanem egy sima For  Next.
    Pl: Dim xx As Byte
    For xx=1 to 14
    link = links(xx)
    ....

    file=files(xx)
    ----

    Next
    Ezáltal minden linkhez a megfelelő fájlok fognak kapcsolódni.

    Üdv.
    Mutasd a teljes hozzászólást!
  • Oooo basszus....

    Köszönöm szépen egy sima For ciklus és megvan :D

    For valtozo = 1 To 14 Set WinHttpReq = CreateObject("Microsoft.XMLHTTP") WinHttpReq.Open "GET", links(valtozo), False, "", "" '("username", "password") WinHttpReq.send If WinHttpReq.Status = 200 Then Set oStream = CreateObject("ADODB.Stream") oStream.Open oStream.Type = 1 oStream.Write WinHttpReq.responseBody oStream.SaveToFile files(valtozo), 2 ' 1 = no overwrite, 2 = overwrite oStream.Close End If Next
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd