2016-05-01 9 views
0

EDIT: Ich habe diesen Code gefunden, um Bilder aus einer XLS-Datei herunterzuladen. Quelle: GET pictures from a url and then rename the pictureLaden Sie Bilder aus einem CSV/XLS-Katalog herunter

Code:

Option Explicit 

Private Declare Function URLDownloadToFile Lib "urlmon" _ 
Alias "URLDownloadToFileA" (ByVal pCaller As Long, _ 
ByVal szURL As String, ByVal szFileName As String, _ 
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long 

Dim Ret As Long 

'~~> This is where the images will be saved. Change as applicable 
Const FolderName As String = "C:\Temp\" 

Sub Sample() 
    Dim ws As Worksheet 
    Dim LastRow As Long, i As Long 
    Dim strPath As String 

    '~~> Name of the sheet which has the list 
    Set ws = Sheets("Sheet1") 

    LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row 

    For i = 2 To LastRow '<~~ 2 because row 1 has headers 
     strPath = FolderName & ws.Range("A" & i).Value & ".jpg" 

     Ret = URLDownloadToFile(0, ws.Range("B" & i).Value, strPath, 0, 0) 

     If Ret = 0 Then 
      ws.Range("C" & i).Value = "File successfully downloaded" 
     Else 
      ws.Range("C" & i).Value = "Unable to download the file" 
     End If 
    Next i 
End Sub 

Es funktioniert gut mit xls-Dateien, wobei "PIC NAME" und "URL" ist in zwei getrennten Spalten. Ich habe eine CSV-Datei und im Gegensatz zu xls hat csv seine Werte in einer Spalte durch "|" (PIC NAME | URL). Also - ein Noob beim Codieren - als Workaround, habe ich "Text to columns" in Excel verwendet, um die Zeilen in zwei separate Spalten zu teilen, ganz nach dem Trennzeichen "|", so kann ich den Originalcode verwenden.

FRAGE: Gibt es eine Möglichkeit, den Code mit einer CSV-Datei arbeiten zu lassen? Dies würde es viel schneller und einfacher machen, Bilder aus großen CSV-Dateien mit Tausenden von Zeilen zu extrahieren.

+1

Bitte entfernen Sie den Flaum - Grüße sind nicht in der Frage einbezogen werden, ist dies ein Q & A-Site, kein Forum. Beschreibe außerdem, was du versucht hast und was dein Problem ist. Momentan handelt es sich bei dieser Frage nicht um irgendein Programmierproblem, sondern um ein "Bitte schreibe den ganzen Code für mich", wofür diese Seite nicht steht. – Polygnome

+0

Eigentlich ein Vorschlag von dieser Website http://stackoverflow.com/questions/15641717/download-files-pdf-from-web1 zeigt genau, wie es geht. –

+0

Können Sie uns sagen, was Ihre Forschung bisher produziert hat? Eine Google-Suche nach "* vba download file *" führte mich zu https://stackoverflow.com/questions/17877389/how-do-i-download-a-file-user-vba-without-internet-explorer. Hast du das probiert? In ähnlicher Weise ergibt eine Suche nach "* vba Schleifenzeilen in Datei *" viele nützliche (Stapelüberlauf-) Lösungen zum Lesen des Inhalts einer Datei. Wenn Sie immer noch Probleme damit haben, sollten Sie Ihre Frage neu formulieren, um genauer zu sein, was genau nicht für Sie funktioniert. – Leviathan

Antwort

0

Da VBA Automatisierung für Excel bietet, kann alles, was Sie manuell tun können, auch von VBA automatisiert werden. In Excel ist sogar ein Makrorekorder integriert, der alle Benutzeraktionen automatisch in VBA-Code umwandelt. Diese Antwort erklärt, wie es funktioniert: Excel's Macro-Recorder usage

Dies kann verwendet werden, um zu sehen, welche Art von VBA-Code die Text zu Spalten Funktion generiert. Wenn Sie den Code ein bisschen aufzuräumen am Ende mit diesem VBA-Befehl auf:

Selection.TextToColumns Destination:=Range("A1") _ 
         , DataType:=xlDelimited _ 
         , Other:=True _ 
         , OtherChar:="|" 

Vergewissern Sie sich, dass Sie Selection durch den gesamten Bereich ersetzen, die Sie in Excel importiert oder dass Sie den gesamten Bereich auswählen, bevor Sie den Code ausführen . Ersetzen Sie auch Range("A1") durch den Bereich, in den das Ergebnis geschrieben werden soll.

Es sollte jedoch angemerkt werden, dass es nicht sehr effizient ist, Zeug in Excel-Zellen zu schreiben, nur um diese Zellen danach zu analysieren. Eine sauberere Lösung für Ihr Problem wäre, die heruntergeladene Datei Zeile für Zeile zu lesen und jede Zeile nach Ihren Bedürfnissen zu analysieren.

Glücklicherweise gibt es schon eine Lösung dafür: Read lines from a text file but skip the first two lines

+0

Ich habe versucht, ein Makro aufzuzeichnen, als ich "Text zu Spalten" manuell auf A1 anwendete und dann den resultierenden Code in das ursprüngliche Skript einfügte. Der ganze Prozess ist nicht besonders schnell. Ich werde die von Ihnen vorgeschlagene alternative Lösung prüfen und prüfen, ob ich einen effizienteren Mod für den ursprünglichen Code entwickeln kann. –

Verwandte Themen