Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
CSV Dateien aus dem Internet herunterladen.
31.07.2018 15:32:49
Mario
Hallo,
ich möchte mehrere CSV-Dateien aus dem Internet herunterladen und auf dem aktuellen Tabellenblatt untereinander ab der Zeile "A4" auflisten. Das geht soweit, jedoch werden zur Zeit die Dateien nebeneinander aufgelistet. Also erste Datei A4:B4, zweite Datei C4:D4. Außerdem wird ein Text oberhalb von A4 verschoben. Danke für die Hilfe im Voraus.
Public Function URLEncode(StringToEncode As String, Optional _
UsePlusRatherThanHexForSpace As Boolean = False) As String
Dim TempAns As String
Dim CurChr As Integer
CurChr = 1
Do Until CurChr - 1 = Len(StringToEncode)
Select Case Asc(Mid$(StringToEncode, CurChr, 1))
Case 48 To 57, 65 To 90, 97 To 122
TempAns = TempAns & Mid$(StringToEncode, CurChr, 1)
Case 32
If UsePlusRatherThanHexForSpace = True Then
TempAns = TempAns & "+"
Else
TempAns = TempAns & "%" & Hex(32)
End If
Case Else
TempAns = TempAns & "%" & Hex(Asc(Mid$(StringToEncode, _
CurChr, 1)))
End Select
CurChr = CurChr + 1
Loop
URLEncode = TempAns
End Function
Sub Import_Allianzen()
' Import Allianzdateien
Dim strTxt As String
Dim strVerz As String
Dim strDat As String
Dim strName As String
Dim strUrl As String
Dim strCon As String
Dim strAnzRow As String
strTxt = "TEXT;"
'strVerz = 'Range("B5") = Verzeichnis oder https://lakkt.de/de/function/downloadCSV.php?link=
strVerz = "https://lakkt.de/de/function/downloadCSV.php?link="
strAnf = "A4" 'Anfang Spieler 1
strEnd = "Z65000" 'Ende Spieler
'Alles löschen
Cells(65000, 1).End(xlUp).Offset(1, 0).Select
Range(strAnf & ":" & strEnd).Delete xlToLeft
Dim lAnzahl As String
Dim i As Long
Dim a As Long
Anf:
lAnzahl = 2 'Worksheets("Daten BNDnisse gesamt").Range("G5") 'InputBox("Wie oft soll das Makro   _
_
laufen ?", , 3)
If lAnzahl = "" Then Exit Sub
i = 1
If IsNumeric(lAnzahl) Then
For i = 1 To CLng(lAnzahl)
'Allianzlink, strDat = "l+k//alliance?929&169"
a = "6" + i
strDat = Worksheets("Daten BNDnisse gesamt").Range("B" & a) 'B7 = Anfang
'Bündnisname
strName = Worksheets("Daten BNDnisse gesamt").Range("A" & a) 'Name
MsgBox strName, vbInformation
'strUrl = l%2Bk%3A%2F%2Falliance%3F929%26169&type=player
strUrl = URLEncode(strDat)
'strCon = https://lakkt.de/de/function/downloadCSV.php?link=l%2Bk%3A%2F%2Falliance%3F929%26169&  _
_
type=player
strCon = strTxt & strVerz & strUrl & "&type=player"
With ActiveSheet.QueryTables.Add(Connection:=strCon, Destination:=Range(strAnf))
.Name = strName
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = False
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 65001
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Next i
Else
MsgBox "Bitte ein Zahl eingeben !", vbInformation
GoTo Anf
End If
'leerzeilen löschen
Dim LgRow As Long
For LgRow = Cells(Rows.Count, 5).End(xlUp).Row To 5 Step -1
If Cells(LgRow, 1) = "" Then Rows(LgRow).Delete
Next
End Sub

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Lord - Knights?
31.07.2018 16:40:50
Fennek
Hallo,
was ist das für eine Seite? Ein Videospiel?
Wenn dein Ansatz nicht zielführend ist, suche nach der API URLMON, die ist wie curl in Linux.
mfg
AW: Lord - Knights?
31.07.2018 22:02:21
Mario
Sorry bin kein Programmierer und bringt mich nicht weiter.
AW: CSV Dateien aus dem Internet herunterladen.
31.07.2018 17:27:19
Luschi
Hallo Mario,
im geposteten Code sind so viele Flüchtigkeitsfehler drin, daß ich keine Lust habe, die ohne Beispieldatei zu entschärfen:
- Dim lAnzahl As String (muß Long oder Integer sein)
- Variablen nicht dimensioniert: strAnf , atrEnd
- a = "6" + i (muß a = 6 + i lauten)
- With ActiveSheet.QueryTables.Add ...
  jeder Aufruf der Prozedur 'Import_Allianzen' erzeugt eine neue Abfrage
  100 Aufrufe = 100 Abfrage-Objekte mit dem selben Inhalt
  Erzeugung von Müllobjekten; beim 100. Aufruf sind die Abfragen 1-99 Müll
- Destination:=Range(strAnf)
  diese Ziel-Zelle für die Abfrage muß bei jedem For-Schleifendurchlauf durch Dich
  neu angepaßt werden
  die vorhergegende Abfrage sperrt die vorgegebene Ziel-Adresse und verschiebt diese
  aus Platzmangel nach rechts
  den Wunsch zum Verschieben nach unten muß man selber programmieren
- ohne Demodatei zum Testen lasse ich aber die Finger davon.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: CSV Dateien aus dem Internet herunterladen.
31.07.2018 18:06:02
daniel
HI
brauchst du dafür überhaupt ein Makro?
hast du schon mal versucht die CSV-Dateien manuell aus dem Web zu laden?
dies geht über Daten - Externe Daten abrufen - aus dem Web
wenn man dann neue Daten braucht, kann man einfach aktualisieren, Excel merkt sich die Verbindung.
wenn du mehrere Tabellen hast, kannst du diese auch untereinander anordnen.
Ändert sich die Zeilenzahl einer Abfrage, so verschieben sich die darunter liegenden Zellen entsprechend, zumindest kann man das bei EIGENSCHAFTEN so einstellen.
Gruß Daniel
AW: CSV Dateien aus dem Internet herunterladen.
31.07.2018 18:52:43
Mario
Hallo,
erst mal Danke für die Tipps und Anregungen. Ich erstelle heut Abend eine Beispiel Datei und setz die morgen rein. Es handelt sich um Internetspiel wo mehrere(Bis zu 300) Bündnisse abgefragt werden. Jetzt erstmal noch einen schönen Abend.
Anzeige
AW: CSV Dateien aus dem Internet herunterladen.
31.07.2018 20:30:07
daniel
Hi
das Problem ist, dass du für alle Tabellen die gleiche Zielzelle angibst (strAnf)
eigentlich müsste Excel die erste Tabelle immer mit der nächsten überschreiben, aber das macht es nicht.
daher musst du die Zielzelle bei jedem Download konkret angeben:
schreib mal die Zeile mit dem Querytable.Add so:
With ActiveSheet.QueryTables.Add(Connection:=strCon, Destination:=IIf(i = 1, Range(strAnf), Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)))
beim ersten Umlauf wird die Zelle strAnf verwendet, danach wird dann durch Sprung von unten die nächste freie Zelle gesucht.
Gruß Daniel
Anzeige
AW: CSV Dateien aus dem Internet herunterladen.
31.07.2018 21:49:29
Mario
Super, das klappt schonmal. Krass wie schell, Danke. Um die Bündnisse zu unterscheiden müsste die erste Zeile wo "Spieler" steht, der Bündnisname "strDat" stehen, geht das?
AW: CSV Dateien aus dem Internet herunterladen.
31.07.2018 22:12:43
daniel
Hi
du kannst den Namen "Spieler" durch strDat ersetzen:
diese Zeile vor dem Next i einfügen:
Columns(1).Replace "Spieler", strDat, lookat:=whole
Gruß Daniel
AW: CSV Dateien aus dem Internet herunterladen.
31.07.2018 23:15:06
Mario
Hatte nen Fehler drin meinte "strName" statt "strDat". Funktioniert jedoch leider nicht, es kommt folgender Fehler...
Index außerhalb des definierten Bereichs (Fehler 9); Office Shared [vblr6.chm1000009]
Habe mal das probiert...
ActiveSheet.UsedRange.Replace "Spieler", strName, xlPart

Doch das ersetzt auch Texte oberhalb der Abfrage.
Gruß
Mario
Anzeige
AW: CSV Dateien aus dem Internet herunterladen.
31.07.2018 23:39:40
daniel
mit deiner Beispieldatei funktioniert dieser Code:
Columns(1).Replace "Spieler", strName, xlWhole
eingefügt vor dem Next i
Gruß Daniel
AW: CSV Dateien aus dem Internet herunterladen.
01.08.2018 19:50:35
Mario
Erstmal Danke. Hab das bei der Tabelle "Feind Spieler" nutzen können. Doch bei der Tabelle "Feind Burgen" überschrieb es mir auch die Texte oberhalb der Tabelle. Ich hatte auch etwas Probleme, da Datenlisten beim Import zu dem Fehler #Bezug! führte. Hab das jetzt so gelöst.
https://www.herber.de/bbs/user/123054.xlsm
Funktioniert jetzt fast so wie gedacht, dank Dir.
Gruß
Mario
Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige