Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1012to1016
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Webabfrage aus Liste in Liste

Webabfrage aus Liste in Liste
26.09.2008 11:25:00
Holger
Hallo,
ich hab mal wieder ein Problem, bei dem ich nicht weiter komme. Hier die Datei:
https://www.herber.de/bbs/user/55676.xls
Aus den Links in Spalte C sollen die in den Spalten D bis J gefragten Werte aus den entsprechenden Webseiten ausgelesen werden. Am besten per Button, den kann ich dann selbst bauen ;-). Damit, wenn sich mal Werte ändern sollten nicht jede Seite aufgerufen werden muss. Die originale Datei hat mehr Zeilen, wäre hier zu groß geworden. Anpassen schaff ich dann selbst. Vielleicht.
Viele Grüße zum WE aus der Hauptstadt
Holger

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Webabfrage aus Liste in Liste
26.09.2008 13:41:00
Rolf
Hallo Holger
Ist wohl eine zwimlich schwierige Frage. Vielleicht kann di das hier weiterhelfen (Hab's nur kurz angelesen)
http://software.magnus.de/office-buero/artikel/webinhalte-in-excel-einfuegen.html
Ansonsten wird's wohl nicht möglich sein. (Aus meiner ganz persönlichen Sicht)
Vlt, gibt's hier ja noch andere Asse, die an einer Lösung basteln...
Einfach so mal, damit du Antwort erhälst. Die Frage lass ich weiterhin offen
Gruss
Rolf
AW: Webabfrage aus Liste in Liste
26.09.2008 14:19:00
Holger
Hallo Rolf,
danke für Deine Antwort. Hat mir sehr geholfen mehr zu verstehen. Klappt auch sehr gut (auch mit anderen Tabellen).
Leider noch keine Lösung zu meinem Problem. Geht wahrscheinlich wirklich nicht.
Ein schönes WE aus der Hauptstadt
Holger
Anzeige
AW: Webabfrage aus Liste in Liste
27.09.2008 09:42:00
Holger
AW: Webabfrage aus Liste in Liste
28.09.2008 13:59:59
Tino
Hallo,
teste mal diesen ausbaufähigen Code auf Deiner Tabelle.
Modul Modul1
Option Explicit 
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 
Sub WebseiteAusfüllen() 
Dim appIE As Object 
Dim rBereich As Range, ZellAbfrage As Range 
Dim strHTML As String 
Dim A As Long 
Dim byZähler As Byte, WarteZeitInSekunden As Byte 
Range("D2:J" & Rows.Count).ClearContents 
'wartezeit fals Seite nicht erreichbar 
WarteZeitInSekunden = 100 '100 = ca. 10 Sek.;  150 = ca. 15 Sek. 
Set rBereich = Range("C2", Cells(Rows.Count, "C").End(xlUp)) 
Set appIE = CreateObject("InternetExplorer.application") 
appIE.Visible = False 
 
For Each ZellAbfrage In rBereich 
appIE.Navigate ZellAbfrage 
  
 While Not appIE.ReadyState = 4 And byZähler < WarteZeitInSekunden 'Warte auf Webseite 
    Sleep (100) 
    byZähler = byZähler + 1 
    DoEvents 
 Wend 
    Sleep (10) 
    DoEvents 
If byZähler < WarteZeitInSekunden Then 
    strHTML = appIE.Document.Body.InnerHtml 
     
    If InStr(strHTML, Cells(1, 4)) > 0 Then 
        For A = 4 To 10 
         Cells(ZellAbfrage.Row, A) = WebdatenZerlegen(Cells(1, A), strHTML) 
        Next A 
    End If 
End If 
byZähler = 0 
Next ZellAbfrage 
 
 
appIE.Quit 
Set appIE = Nothing 
MsgBox "Daten wurden aktualisiert", vbInformation 
End Sub 
 
Function WebdatenZerlegen(strSuch As String, strHTML As String) As Variant 
 Dim tempHTML As String 
 Dim strSonder As String, strSonderE As String 
 'Sonderdaten (hier stimmt die Überschrift mit der Suche nicht überein 
 If strSuch = "U1-Satz" Or strSuch = "Allg. Beitragsatz" Then 
    strSuch = IIf(InStr(strSuch, "U1-") > 0, "U1-Sätze / Erstattung:", "Beitragssätze:") 
    strSonder = "<B>" 
    strSonderE = "</B>" 
 Else 
    strSonder = "<P>" 
    strSonderE = "</P>" 
 End If 
  
 tempHTML = Right$(strHTML, Len(strHTML) - InStr(strHTML, strSuch)) 
  
 tempHTML = Right$(tempHTML, Len(tempHTML) - InStr(tempHTML, "Color")) 
 tempHTML = Right$(tempHTML, Len(tempHTML) - InStr(tempHTML, strSonder) - 2) 
 tempHTML = Left$(tempHTML, InStr(tempHTML, strSonderE) - 1) 
 tempHTML = Replace(tempHTML, "<BR>", Chr(10)) 
 tempHTML = Replace(tempHTML, "<P>", "") 
 WebdatenZerlegen = tempHTML 
End Function 


Gruß Tino

www.VBA-Excel.de


Anzeige
etwas schneller
28.09.2008 15:02:00
Tino
Hallo,
etwas schneller geht es hiermit, benötigt aber den Verweis auf
Microsoft HTML Object Library
Modul Modul1
Option Explicit 
'Verweis: Microsoft HTML Object Library 
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 
 
Sub WebseiteAusfüllen() 
Dim objMSHTML As New MSHTML.HTMLDocument 
Dim Doc As MSHTML.HTMLDocument 
Dim rBereich As Range, ZellAbfrage As Range 
Dim strHTML As String 
Dim A As Long 
Dim byZähler As Byte, WarteZeitInSekunden As Byte 
Range("D2:J" & Rows.Count).ClearContents 
'wartezeit fals Seite nicht erreichbar 
Set rBereich = Range("C2", Cells(Rows.Count, "C").End(xlUp)) 
 
For Each ZellAbfrage In rBereich 
Set Doc = objMSHTML.createDocumentFromUrl(ZellAbfrage, vbNullString) 
Sleep (10) 
DoEvents 
    strHTML = Doc.Body.InnerHtml 
    
    If InStr(strHTML, Cells(1, 4)) > 0 Then 
        For A = 4 To 10 
         Cells(ZellAbfrage.Row, A) = WebdatenZerlegen(Cells(1, A), strHTML) 
        Next A 
    End If 
 
byZähler = 0 
Next ZellAbfrage 
 
MsgBox "Daten wurden aktualisiert", vbInformation 
End Sub 
 
 
Function WebdatenZerlegen(strSuch As String, strHTML As String) As Variant 
 Dim tempHTML As String 
 Dim strSonder As String, strSonderE As String 
 'Sonderdaten (hier stimmt die Überschrift mit der Suche nicht überein 
 If strSuch = "U1-Satz" Or strSuch = "Allg. Beitragsatz" Then 
    strSuch = IIf(InStr(strSuch, "U1-") > 0, "U1-Sätze / Erstattung:", "Beitragssätze:") 
    strSonder = "<B>" 
    strSonderE = "</B>" 
 Else 
    strSonder = "<P>" 
    strSonderE = "</P>" 
 End If 
  
 tempHTML = Right$(strHTML, Len(strHTML) - InStr(strHTML, strSuch)) 
  
 tempHTML = Right$(tempHTML, Len(tempHTML) - InStr(tempHTML, "Color")) 
 tempHTML = Right$(tempHTML, Len(tempHTML) - InStr(tempHTML, strSonder) - 2) 
 tempHTML = Left$(tempHTML, InStr(tempHTML, strSonderE) - 1) 
 tempHTML = Replace(tempHTML, "<BR>", Chr(10)) 
 tempHTML = Replace(tempHTML, "<P>", "") 
 WebdatenZerlegen = tempHTML 
End Function 
 


Gruß Tino

www.VBA-Excel.de


Anzeige
=wiederholen("Danke";1000)
29.09.2008 09:59:34
Holger
Hallo Tino,
vielen Dank. Funktioniert Prima. Was alles so geht, wenn man Ahnung hat. Respekt.
Viele Grüße aus der Hauptstadt
AW: Webabfrage aus Liste in Liste
28.09.2008 16:03:00
Anton
Hallo ,
noch eine Variante:

Sub alle_krankenkassen()
  Dim IEApp As Object, IEDocument As Object    
  Dim strTeile
  Cells.Clear
  Cells(1, 1).Value = "Krankenkasse"
  Cells(1, 2).Value = "Anschrift"
  Cells(1, 3).Value = "Telefon"
  Cells(1, 4).Value = "Fax"
  Cells(1, 5).Value = "Beitragssatz"
  Cells(1, 6).Value = "Betriebsnummer"
  Cells(1, 7).Value = "U1-Satz"
  Cells(1, 8).Value = "U2-Satz"
  Rows(1).Font.Bold = True
  Start = Timer
  Set IEApp = CreateObject("InternetExplorer.Application")  
  IEApp.Visible = False
  For k = 2 To 326  
laden:
    IEApp.Navigate "http://www.krankenkassentarife.de/baseportal/kd2&kk=" & (k - 2)
    Do: Loop Until IEApp.Busy = False    
    Do: Loop Until IEApp.Busy = False    
    Application.Wait (Now + TimeValue("0:00:01"))
    Set IEDocument = IEApp.Document  
    strTeile = Split(IEDocument.Body.innerText, vbCrLf)
    If UBound(strTeile) < 15 Then GoTo laden    
    Application.Wait (Now + TimeValue("0:00:01"))
    Application.StatusBar = (k - 2) & " " & strTeile(14)
    If strTeile(14) <> "Krankenkasse nicht gefunden. Bitte versuchen Sie es über die Krankenkassenliste" Then  
      ActiveSheet.Hyperlinks.Add Anchor:=Cells(k, 1), _
        Address:="http://www.krankenkassentarife.de/baseportal/kd2&kk=" & (k - 2), _
        TextToDisplay:=strTeile(14)
      For i = LBound(strTeile) To UBound(strTeile)  
        If InStr(1, strTeile(i), "Anschrift:", vbTextCompare) > 0 Then  
          Cells(k, 2).Value = Replace(strTeile(i), "Anschrift:", "") & Chr(10) & strTeile(i + 1)
        End If  
        If InStr(1, strTeile(i), "Telefon:", vbTextCompare) > 0 Then  
          Cells(k, 3).Value = Replace(strTeile(i), "Telefon:", "")
        End If  
        If InStr(1, strTeile(i), "Fax:", vbTextCompare) > 0 Then  
          Cells(k, 4).Value = Replace(strTeile(i), "Fax:", "")
        End If  
        If InStr(1, strTeile(i), "Beitragssatz für Versorgungsbezüge:", vbTextCompare) > 0 Then  
          Cells(k, 5).Value = Replace(strTeile(i), "Beitragssatz für Versorgungsbezüge:", "")
        End If  
        If InStr(1, strTeile(i), "Betriebsnummer:", vbTextCompare) > 0 Then  
          Cells(k, 6).Value = Replace(strTeile(i), "Betriebsnummer:", "")
        End If  
        If InStr(1, strTeile(i), "U1-Sätze / Erstattung:", vbTextCompare) > 0 Then  
          Cells(k, 7).Value = Replace(strTeile(i), "U1-Sätze / Erstattung:", "")
        End If  
        If InStr(1, strTeile(i), "U2-Satz:", vbTextCompare) > 0 Then  
          Cells(k, 8).Value = Replace(strTeile(i), "U2-Satz:", "")
        End If  
      Next
    End If  
    strTeile = ""
    Set IEDocument = Nothing  
  Next
  IEApp.Quit
  Set IEApp = Nothing  
  Rows("2:2").Select
  ActiveWindow.FreezePanes = True
  Columns.AutoFit
  Application.StatusBar = ""
  MsgBox "Fertig!" & vbCr & (Timer - Start) / 60 & " min"
End Sub  

mfg Anton
Anzeige
=wiederholen("Danke";1000)
29.09.2008 10:02:00
Holger
Hallo Anton,
auch dir vielen Dank für deine Mühe. Klappt prima.
Viele Grüße aus der Hauptstadt
Holger

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige