Hallo Herbert!
Hier mal ein Beispiel wie es geht. Es wird dabei das Datum aus Zelle A1 im ersten Sheet genommen und dann die Seite ausgelesen. Aber nicht wundern, dass dauert ein wenig - sind ja immerhin knapp 3000 Zugriffe auf die IE Objekte. Für deinen Wunsch aller Daten müsstest du nur ein for Schleife einbauen und durch die Zellen von Spalte A gehen. Dazu ggf. mal den COde anpassen, beende ihn derzeit, wenn ein Datum nicht (mehr) da ist. Und man könnte dem eingefügten Blatt noch den Namen vom Datum geben. Dabei solltest du aber vorher prüfen, ob ein Blatt mit dem Namen schon existiert. Sonst kommt ein Fehler. Wenn was nicht klappt oder Fragen bestehen, einfach melden.
Gruß Matthias
Option Explicit
Sub htmlauslesen()
Dim myUrl As String 'adresse wo es hin gehen soll
Dim IE As Object ' INstanz vom IE
Dim doc ' das Dokument object der Seite
Dim tagindex ' Tag der gesucht wird
Dim a As Long, b As Long ' nur zum Zählen
Dim spalten As Integer 'für die Tabellenspalten
Dim zeilen As Integer 'für die Tabellenzeilen
Dim inhalt() As Variant
Application.ScreenUpdating = False
myUrl = "www.cuttino.de" ' Adresse von EPLAN URL
'datumswert aussuchen und setzen incl. überprüfen
' es gibt 36 Einträge, index 0 ist letzte Nacht, danach von 1 bis 35, über Index ansprechen
'prüfen, ob es den Wert gibt
If Worksheets(1).Cells(1, 1).Value > Date - 1 Or Worksheets(1).Cells(1, 1).Value < Date - 36 Then
MsgBox "Das gewünschte Datum konnte nicht gefunden werden. Das Auswerten wird beendet. Bitte die Eingabe prüfen!"
End
End If
If Worksheets(1).Cells(1, 1).Value = Date - 1 Then
tagindex = 0
Else
tagindex = DateDiff("d", Worksheets(1).Cells(1, 1).Value, Date)
If tagindex > 36 Then End 'doch noch was schief gelaufen
End If
' IE öffnen
Set IE = CreateObject("InternetExplorer.Application") ' neue IE öffnen
Do: Loop Until IE.Busy = False
'Seite ansteuern
IE.Navigate myUrl
Do: Loop Until IE.Busy = False
'auf Dokument der Seite zugreifen
Set doc = IE.Document
Do: Loop Until doc.ReadyState = "complete"
doc.getElementById("d").selectedIndex = tagindex
Do: Loop Until doc.ReadyState = "complete"
'prüfen ob Eintrag geklappt hat
'anklicken
doc.forms(0).submit
Do: Loop Until doc.ReadyState = "complete"
'*********************************************************daten auslesen**************************************
' es gibt nur eine Tabelle deshalb brauch wir die nicht zählen
'anzahl spalten
zeilen = doc.getElementsByTagName("table")(0).getElementsByTagName("tr").Length - 2 ' lezte zeile nicht
spalten = doc.getElementsByTagName("table")(0).getElementsByTagName("tr")(1).getElementsByTagName("td").Length - 2 'eigentlich nur -1 aber die Auswahlspalte brauchen wir nicht
'jetzt unser Array festlegen
ReDim inhalt(zeilen, spalten)
'Überschriften auslesen
For b = 0 To spalten
inhalt(0, b) = doc.getElementsByTagName("table")(0).getElementsByTagName("tr")(0).getElementsByTagName("th")(b).innertext
Next b
'jetzt den Rest auslesen
For a = 1 To zeilen - 1
For b = 0 To spalten
inhalt(a, b) = doc.getElementsByTagName("table")(0).getElementsByTagName("tr")(a + 1).getElementsByTagName("td")(b).innertext
Next b 'spalten
Next a 'Zeilen
ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Activate
ActiveSheet.Columns(3).NumberFormat = "@"
ActiveSheet.Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(zeilen, spalten)) = inhalt
IE.Quit ' die Anwendung wieder schließen
Set doc = Nothing
Set IE = Nothing
Application.ScreenUpdating = True
End Sub
|