Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1628to1632
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

per Makro zwei Daten von Inetseite auslesen

per Makro zwei Daten von Inetseite auslesen
23.06.2018 23:34:01
Inetseite
Hallo an euch alle,
wolle mal fragen, da ich gelesen habe dass Excel Makros auf Internetseiten zugreifen können ob folgendes möglich ist.
1. Ich schreibe einen Text in Spalte B. (in meinem Beispiel nm0000722)
2. Das Makro soll dann automatisch ohne dass ich etwas zusätzlich mache, die Seite https://www.imdb.com/name/nm0000722/ öffnen.
3. Es soll den fett geschriebenen Namen des Schauspielers, im Beispiel Joss Ackland in Spalte C ausgeben.
4. Es soll den Geburtstag des Schauspielers in dem Fall February 29, 1928 in Spalte D ausgeben.
Da ich bereits eine Formel habe, die diesen Geburtstag in das Format 29.02.1928 bringt, braucht das Makro den Geburtstag nicht umzuwandeln.
Was jedoch passieren kann, wie z.B. auf der Seite https://www.imdb.com/name/nm6000000/ dass der Geburtstag unbekannt ist, dann soll halt kein Geburtstag in die Tabelle übertragen werden und auch keine Fehlermeldung darüber erscheinen.
ist das machbar?
Danke und Gruß
Christian

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: per Makro zwei Daten von Inetseite auslesen
24.06.2018 07:41:22
Inetseite
Hallo Christian,
in das Modul der Tabelle.
Microsoft Excel Objekt Tabelle1
Option Explicit 
 
Private Sub Worksheet_Change(ByVal Target As Range) 
  Dim objIE As Object 
 
  On Error GoTo ErrorHandler 
  Application.EnableEvents = False 
   
  If Target(1, 1).Column = 2 And Target(1, 1).Row > 1 Then 
    Target(1, 1).Offset(0, 1) = "...wait" 
    Set objIE = CreateObject("InternetExplorer.Application") 
    With objIE 
      .Navigate "https://www.imdb.com/name/" & Target(1, 1).Text & "/" 
      Do While .Busy Or .readystate <> 4 
        DoEvents 
      Loop 
      Target(1, 1).Offset(0, 1) = .Document.getElementsByClassName("itemprop")(0).innerText 
      Target(1, 1).Offset(0, 2) = .Document.getElementsByTagName("time")(0).innerText 
      .Quit 
    End With 
    If Target(1, 1).Offset(0, 1) = "...wait" Then Target(1, 1).Offset(0, 1) = "no data" 
  End If 
 
ErrorHandler: 
 
  Application.EnableEvents = True 
 
  Set objIE = Nothing 
End Sub 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: per Makro zwei Daten von Inetseite auslesen
24.06.2018 08:46:46
Inetseite
Hallo Sepp,
danke erstmal für deine Mühe.
Doch leider werden bei mir keine Daten eingelesen, auch keine Fehlermeldung, es öffnet sich auch kein Fenster im Internet Explorer.
https://www.herber.de/bbs/user/122271.xlsm
Gruß
Christian
Gruß
Christian
betrifft auch das 2. Makro owt
24.06.2018 08:49:24
Christian
.
AW: per Makro zwei Daten von Inetseite auslesen
24.06.2018 09:05:51
Inetseite
Hallo Christian,
ich schrieb doch "in das Modul der Tabelle"!
https://www.herber.de/bbs/user/122272.xlsm
 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: per Makro zwei Daten von Inetseite auslesen
24.06.2018 09:14:24
Inetseite
Hallo Sepp,
ich verstehe die Excel Welt nicht mehr. Denn an der Stelle hatte ich es zuerst.
Bei meiner Tabelle funktioniert es auch weiterhin nicht, auch wenn ich das Makro in das Modul der Tabelle1 packe.
In der Datei, die du mir gerade geschickt hast, funktioniert es jedoch.
Benutze dann also einfach diese Datei.
Danke
AW: per Makro zwei Daten von Inetseite auslesen
24.06.2018 09:32:29
Inetseite
Hallo Christian,
der ursprünglichen Code reagiert erst bei einer Eingabe ab Zeile 2, da ich in Zeile 1 eigentlich eine Überschrift vermute.
 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: per Makro zwei Daten von Inetseite auslesen
24.06.2018 10:01:58
Inetseite
Hallo Sepp,
ich habe noch eine andere Frage,
nachdem ich das ganze mit mehreren Texten gemacht habe, habe ich eine CPU Auslastung von 100% und sehr viele IE Einträge im Task Manager. Kann es sein, dass das Makro den IE Prozess nicht beendet?
Wäre es denn umsetzbar, dass es das macht?
Gruß
Christian
AW: per Makro zwei Daten von Inetseite auslesen
24.06.2018 10:29:23
Inetseite
Hallo Christian,
ergänze den Code folgendermaßen.
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim objIE As Object

  On Error GoTo ErrorHandler
  Application.EnableEvents = False
  With Target(1, 1)
    If .Column = 2 Then
      If .Value = "" Then
        .Resize(, 3).ClearContents
      Else
        .Offset(0, 1) = "...wait"
        Set objIE = CreateObject("InternetExplorer.Application")
        objIE.Navigate "https://www.imdb.com/name/" & .Text & "/"
        Do While objIE.Busy Or objIE.readystate <> 4
          DoEvents
        Loop
        On Error Resume Next
        .Offset(0, 1) = objIE.Document.getElementsByClassName("itemprop")(0).innerText
        .Offset(0, 2) = objIE.Document.getElementsByTagName("time")(0).innerText
        objIE.Quit
        Err.Clear
        On Error GoTo ErrorHandler
        If .Offset(0, 1) = "...wait" Then .Offset(0, 1) = "no data"
      End If
    End If
  End With
ErrorHandler:

  Application.EnableEvents = True

  Set objIE = Nothing
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: per Makro zwei Daten von Inetseite auslesen
24.06.2018 11:00:33
Inetseite
Hallo Sepp,
das funktioniert, vielen Dank
Christian
noch etwas verändert
24.06.2018 08:39:10
Sepp
Hallo Christian,
eine verbesserte Version.
Microsoft Excel Objekt Tabelle1
Option Explicit 
 
Private Sub Worksheet_Change(ByVal Target As Range) 
  Dim objIE As Object 
 
  On Error GoTo ErrorHandler 
  Application.EnableEvents = False 
  With Target(1, 1) 
    If .Column = 2 And .Row > 1 Then 
      If .Value = "" Then 
        .Resize(, 3).ClearContents 
      Else 
        .Offset(0, 1) = "...wait" 
        Set objIE = CreateObject("InternetExplorer.Application") 
        objIE.Navigate "https://www.imdb.com/name/" & .Text & "/" 
        Do While objIE.Busy Or objIE.readystate <> 4 
          DoEvents 
        Loop 
        On Error Resume Next 
        .Offset(0, 1) = objIE.Document.getElementsByClassName("itemprop")(0).innerText 
        .Offset(0, 2) = objIE.Document.getElementsByTagName("time")(0).innerText 
        Err.Clear 
        On Error GoTo ErrorHandler 
        If .Offset(0, 1) = "...wait" Then .Offset(0, 1) = "no data" 
      End If 
    End If 
  End With 
ErrorHandler: 
 
  Application.EnableEvents = True 
 
  Set objIE = Nothing 
End Sub 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: noch etwas verändert
27.06.2018 23:27:19
Christian
Hallo Sepp,
habe leider nach dem Arbeiten mit dem Makro doch noch ein Problem festgestellt:
https://www.imdb.com/name/nm0203574/
in diesem Fall wird das Todesdatum ausgelesen, nicht das Geburtsdatum, entsprechend wäre es mein Wunsch, dass das Makro in diesem Fall nichts in Spalte D ausgibt, da kein Geburtsdatum existiert.
in so einem Fall, bei dem es sowohl ein Geburts- als ein Todesdatum gibt, wird korrekt das Geburtsdatum übertragen.
https://www.imdb.com/name/nm0001655/
Kannst du bitte nochmal danach schaun?
Gruß
Christian
AW: noch etwas verändert
28.06.2018 14:59:37
PeterK
Hallo

On Error Resume Next
.Offset(0, 1) = objIE.Document.getElementsByClassName("itemprop")(0).innerText
If Mid(objIE.Document.getElementsByTagName("time")(0).ParentElement.innerText, 1, 4) = "Born"  _
Then
.Offset(0, 2) = objIE.Document.getElementsByTagName("time")(0).innerText
Else
.Offset(0, 2) = ""
End If
Err.Clear

Anzeige
AW: noch etwas verändert
28.06.2018 15:44:01
Christian
Hallo Peter,
das funktioniert soweit, danke.
Eine Frage hätte ich noch, inzwischen stehen in Spalte B 789 Einträge. Das derzeitige Makro muss ich 789 mal starten für jede Zeile einzeln um zu überprüfen ob es sich in Spalte D um ein Geburts- oder einen Todestag handelt.
Was muss ich tun um mit einem einmaligen Starten das Makros alle 789 Einträge in Spalte B zu überprüfen?
Gruß
Christian
AW: noch etwas verändert
28.06.2018 16:21:21
PeterK
Hallo
Ich hab hier einmal 10 (statt 789) eingesetzt. Geh in die erste Zelle und "ändere" sie. Wenn alles zu deiner Zufriedenheit fertig ist (wird etwas dauern) setze den Zähler auf 1 (damit kannst Du die Änderung drinnen lassen und bei Bedarf wieder aktivieren)
Ich hab den ganzen Code rein kopiert, wichtig ist aber nur die FOR-Schleife und die Änderung der WITH Anweisung ;-)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim objIE As Object
Dim i As Integer
On Error GoTo ErrorHandler
Application.EnableEvents = False
For i = 1 To 10
With Target(i, 1)
If .Column = 2 And .Row > 1 Then
If .Value = "" Then
.Resize(, 3).ClearContents
Else
.Offset(0, 1) = "...wait"
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate "https://www.imdb.com/name/" & .Text & "/"
Do While objIE.Busy Or objIE.readystate  4
DoEvents
Loop
On Error Resume Next
.Offset(0, 1) = objIE.Document.getElementsByClassName("itemprop")(0). _
innerText
If Mid(objIE.Document.getElementsByTagName("time")(0).ParentElement. _
innerText, 1, 4) = "Born" Then
.Offset(0, 2) = objIE.Document.getElementsByTagName("time")(0). _
innerText
Else
.Offset(0, 2) = ""
End If
Err.Clear
On Error GoTo ErrorHandler
If .Offset(0, 1) = "...wait" Then .Offset(0, 1) = "no data"
End If
End If
End With
Next i
ErrorHandler:
Application.EnableEvents = True
Set objIE = Nothing
End Sub

Anzeige
AW: noch etwas verändert
28.06.2018 17:23:19
Christian
Hallo Peter,
ich befürchte, da gab es ein Misverständnis weil ich mich nicht eindeutig ausgedrückt habe.
Ich dachte an ein zusätzliches Makro, welches ich ganz normal über Ansicht - Makros usw. bei Bedarf starten kann.
Und dann einfach alles was in Spalte B steht erneut überprüft und die vorhandenen Einträge in Spalte C und D überschreibt, egal ob es jetzt 10, 789 oder 12000 Einträge sind.
Gruß
Christian
AW: noch etwas verändert
28.06.2018 18:54:54
Sepp
Hallo Christian,
in ein allgemeines Modul.
Modul Modul1
Option Explicit 
 
Sub checkData() 
  Dim objIE As Object, rng As Range, rngC As Range 
 
 
  On Error Resume Next 
  Application.ScreenUpdating = False 
  Set rng = Range("B:B").SpecialCells(xlCellTypeConstants) 
  If Not rng Is Nothing Then 
    Set objIE = CreateObject("InternetExplorer.Application") 
    For Each rngC In rng 
      With rngC 
        .Offset(0, 1).Resize(1, 2) = "" 
        objIE.Navigate "https://www.imdb.com/name/" & .Text & "/" 
        Do While objIE.Busy Or objIE.readystate <> 4 
          DoEvents 
        Loop 
        .Offset(0, 1) = objIE.Document.getElementsByClassName("itemprop")(0).innerText 
        If Mid(objIE.Document.getElementsByTagName("time")(0).ParentElement.innerText, 1, 4) = "Born" Then 
          .Offset(0, 2) = objIE.Document.getElementsByTagName("time")(0).innerText 
        Else 
          .Offset(0, 2) = "" 
        End If 
        If .Offset(0, 1) = "" Then .Offset(0, 1) = "no data" 
      End With 
    Next 
  End If 
   
ErrorHandler: 
  If Not objIE Is Nothing Then objIE.Quit 
  Application.ScreenUpdating = True 
  On Error GoTo 0 
  Set objIE = Nothing 
  Set rng = Nothing 
  Set rngC = Nothing 
End Sub 
 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige