Daten einer API laden

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Daten einer API laden
von: Claus
Geschrieben am: 04.11.2015 19:14:40

Hallo Excel-Spezialisten,
kann ein Makro die Daten einer API laden und weiterverarbeiten?
Beispiel:
http://www.karopapier.de/api/user/773/dran.j s o n (natürlich json ohne Leerstellen - diesen link darf ich aber nicht posten)
hiervon möchte ich nach "GID=" suchen und jeweils die Zahl danach im Tabellenblatt API in Zelle A1 ... bis Ax haben.
Z. B.: (ändert sich aber oft)
A1: 83789
A2: 87405
A3: 87235
A4: 87321
Es handelt sich aber nicht zwingend um 5-stellige Zahlen (bald kommt die sechste Stelle dazu)
Vielen Dank und liebe Grüße
Claus

Bild

Betrifft: AW: Daten einer API laden
von: Sepp
Geschrieben am: 04.11.2015 21:38:34
Hallo Claus,
was hat das mit API zu tun?
das ist ene einfache Textdatei.
Probier mal.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

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


Private Function TextReadAll(ByVal FileName As String) As String
Dim FF As Integer, strText As String

On Error Resume Next

FF = FreeFile
Open FileName For Binary As #FF
strText = Space$(LOF(FF))
Get #FF, , strText
Close #FF
TextReadAll = strText

On Error GoTo 0
Err.Clear
End Function


Public Sub test()
Dim strTmp As String, strSrc As String, strFile As String
Dim varTmp() As Variant
Dim lngI As Long, lngP1 As Long, lngP2 As Long

On Error GoTo ErrorHandler

strSrc = "http://www.karopapier.de/api/user/773/dran.json"
strFile = Environ("TEMP") & "\tmp.json"

Call URLDownloadToFile(0, strSrc, strFile, 0, 0)

If Dir(strFile, vbNormal) <> "" Then
  strTmp = TextReadAll(strFile)
  
  Do
    lngP1 = InStr(lngP1 + 1, strTmp, "GID=")
    If lngP1 > 0 Then
      lngP2 = InStr(lngP1, strTmp, "}")
      If lngP2 > 0 Then
        Redim Preserve varTmp(lngI)
        varTmp(lngI) = Clng(Mid(strTmp, lngP1 + 4, lngP2 - lngP1 - 5))
        lngI = lngI + 1
      End If
    End If
  Loop While lngP1 > 0 And lngP2 > 0
  
  If lngI > 0 Then
    Sheets("API").Range("A1").Resize(lngI, 1) = Application.Transpose(varTmp)
  End If
  
  Kill strFile
End If

ErrorHandler:

With Err
  If .Number <> 0 Then
    MsgBox "Fehler in Prozedur:" & vbTab & "'test'" & vbLf & String(60, "_") & _
      vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
      "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
      .Description & vbLf, vbExclamation + vbMsgBoxSetForeground, _
      "VBA - Fehler in Prozedur - test"
    .Clear
  End If
End With

On Error GoTo 0

End Sub

Gruß Sepp


Bild

Betrifft: AW: Daten einer API laden
von: Claus
Geschrieben am: 05.11.2015 09:09:53
Hallo Sepp,
wow - das ist ja echt viel Code. Vielen Dank dafür. Auf die schnelle kam da aber ne Fehlermeldung und mein Problem ist, dass ich grad Streß wegen was Anderem habe - ich muss dieses Thema also zurückstellen. Ich werde es also in ein paar Tagen wieder probieren und mich dann ggf. zwecks Rückfrage melden, ok?
Liebe Grüße
Claus

Bild

Betrifft: AW: Daten einer API laden
von: Claus
Geschrieben am: 05.11.2015 12:46:21
Hallo Sepp,
hab jetzt mal den Code als Makro gespeichert, da kommt:
Fehler beim Kompilieren:
Innerhalb einer Prozedur ungültig
und Option Explicit ist markiert...
vermutlich ist mir nicht klar, wie genau ich diesen Code einbinden muss?

Bild

Betrifft: 'Option Explicit' steht bei Sepp am Anfang des ...
von: Luc:-?
Geschrieben am: 05.11.2015 17:56:25
…Moduls, Claus,
und so muss das auch bleiben (man kann das auch im VBE einstellen, dann kommt es automatisch). Gleiches gilt für alles Folgende. Nicht in irgendeine Prozedur hineinkopieren! So etwas sollte man auch bei bescheidenen VBA-Kenntnissen erwarten dürfen!
Gruß, Luc :-?

Besser informiert mit …

Bild

Betrifft: AW: Daten einer API laden
von: Sepp
Geschrieben am: 05.11.2015 19:51:24
Hallo Claus,
in deiner Datei, einfach im Visual-Basic-Editor (VBE) ein allgemeines Modul (Einfügen > Modul) einfügen und den gesamten Code hineinkopieren und die Prozedur "Test" ausführen.

Gruß Sepp


Bild

Betrifft: AW: Daten einer API laden
von: Claus
Geschrieben am: 06.11.2015 13:38:56
Hallo Sepp,
ja! Es funktioniert. Super vielen Dank dafür.
Hallo Luc:
stimmt, selbst bei VBA bescheiden sollte man das wissen. Sorry, ich hab da falsch angegeben - ich kann VBA gar nicht, sondern ich erzeuge Makros durch Aufzeichnen und ändere dann drin rum. Deshalb fehlen mir die grundlegenden Rahmenbedingungen. Ich sollte mich da wohl mal ein wenig einarbeiten. Dann hätte ich nämlich gleich feststellen können, dass Sepp mir genau den Code gegeben hat den ich brauche. Tut mir leid, dass ich unnötig Arbeit erzeugt habe.
In diesem Zusammenhang möchte ich noch kurz erwähnen, dass mir schon mehrfach prima hier geholfen wurde und ich sehr dankbar und zufrieden bin.
Liebe Grüße
Claus

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Buchhaltungstabelle Beleg Art Zusammenfassen"