Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1804to1808
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
Index außerhalb des gültigen Bereichs
18.01.2021 13:50:20
Christian
Hallo,
habe unten stehendes Makro, welches beim Öffnen der Datei gestartet wird.
Jedesmal kommt nach einer gewissen Zeit, wenn das Makro 2 gestartet wird, die Meldung
Index außerhalb des gültigen Bereichs und beim Debuggen wird die Zeile
Set Internet = CreateObject("InternetExplorer.Application") im Makro 2 markiert.
Interessanterweise, wenn ich das Makro beende und im Anschluss dann händig das Makro1 starte, kommt keine Fehlermeldung mehr.
Was kann ich machen, dass es künftig auch beim ersten mal funktioniert?
Eine Beispielmappe möchte ich ungerne hochladen, da das Ganze nur miti den Koordinaten meines Hauses sinnvolle und nachvollziehbare Ergebnisse bringt, mit denen man auch die Funktionen der Mappe nachvollziehen kann.
Damals als ich diese Mappe erstellt hatte, gab es ein Versuch von Günther die Daten mittels Powerquery herunterzuladen, damals zumindest ist es laut Günther an dem Aufbau/ der Programmierung der Internetseite gescheitert, sodass ich auf eine Makrolösung ausgewichen bin.
Hier die Makros:

Sub Makro1()
'1. Internetseite laden
Sheets("Tabelle1").Select
Columns("I:I").Select
Selection.Replace What:="Tabelle2!", Replacement:="Tabelle3!", LookAt:= _
xlPart, SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Sheets("Tabelle2").Select
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
Sheets("Tabelle3").Select
Sheets.Add
ActiveSheet.Name = "Tabelle2"
Sheets("Tabelle3").Select
Dim Internet As Object
Set Internet = CreateObject("InternetExplorer.Application")
Internet.Navigate [a1]
Do While Not Internet.ReadyState = 4
DoEvents
Loop
Internet.Visible = True
Internet.execwb 17, 0
Internet.execwb 12, 0
Internet.execwb 18, 0
Do While Not Internet.ReadyState = 4
DoEvents
Loop
Internet.Quit
Set Internet = Nothing
Sheets("Tabelle2").Select
Range("a1").Select
Sheets("Tabelle2").Paste
Application.OnTime Now + TimeValue("00:00:25"), "Makro2"
End Sub

------------------------------------------------------------------------------------------------ _ --

Sub Makro2()
'2. Internetseite laden
Sheets("Tabelle2").Select
Range("a6000").Select
Selection.End(xlUp).Select
ActiveCell.Offset(3, 0).Select
Sheets("Tabelle3").Select
Dim Internet As Object
Set Internet = CreateObject("InternetExplorer.Application")
On Error GoTo 0
Internet.Navigate [a2]
Do While Not Internet.ReadyState = 4
DoEvents
Loop
Internet.Visible = True
Internet.execwb 17, 0
Internet.execwb 12, 0
Internet.execwb 18, 0
Do While Not Internet.ReadyState = 4
DoEvents
Loop
Internet.Quit
Set Internet = Nothing
Sheets("Tabelle2").Select
Sheets("Tabelle2").Paste
Sheets("Tabelle1").Select
Columns("I:I").Select
Selection.Replace What:="Tabelle3!", Replacement:="Tabelle2!", LookAt:= _
xlPart, SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Range("a1").Select
End Sub

------------------------------------------------------------------------------------------------ _
--

Sub Makro3()
' Makro3 Makro
Columns("I:I").Select
Selection.Replace What:="Tabelle3!", Replacement:="Tabelle2!", LookAt:= _
xlPart, SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub

------------------------------------------------------------------------------------------------ _
-----------------

Sub Makro4()
Application.OnTime TimeValue("00:00:00")
Makro1
Application.OnTime Now + TimeValue("01:00:00")
Makro1
End Sub

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
danke für eure Unterstützung owT
18.01.2021 13:51:03
Christian
.
AW: danke für eure Unterstützung owT
18.01.2021 14:25:09
Yal
Hallo Christian,
probiere mal den "Early Binding": Anbindung der Bibliothek über
Extras> Verweise...> Microsoft Internet Controls
siehe
https://riptutorial.com/de/vba/example/27772/internet-explorer-objekt
Mache verschiedene Try&Error, in dem Du in deinem Sub nur den Code hast, den Du testen möchtest, bzw schneidet Makro1 nach und nach bis nur noch Set Internet.. übrig ist.
Von hier aus gesehen, sehe ich keine Fehler im Code.
VG
Yal
AW: danke für eure Unterstützung owT
18.01.2021 17:17:28
Christian
Hallo Yal,
jetzt verstehe ich die Excel Welt nicht mehr.
Erstmal vielen Dank. Um ehrlich zu sein, ich verstehe bei dem was auf der Internetseite steht nur Bahnhof.
Habe jedoch mal die DAtei gestart um die Bibliothek anzubinden und interessanterweise lief dieses eine mal das Makro durch.
Habe dann trotzdem mal den Haken gesetzt und die Datei nochmal neu gestartet. Auch da lief das Makro durch.
Was ich mich aber frage, wenn das Problem auftritt, tritt es ja erst beim zweiten Abruf einer Seite auf. Im Makro1 wird ja ebenfalls bereits eine Seite aufgerufen und da funktioniert es noch. Wie als wenn es an der Stelle wo das Internet im Makro1 verlassen wird, ein Problem gibt.
Gruß
Christian
Anzeige
aber mal eine Frage an Günther...
18.01.2021 17:25:55
Christian
ich würde dich mal bitten zu schauen, ob es inzwischen nicht auch möglich ist, die Daten mit Powerquery abzurufen.
Es geht um folgende beiden Seiten (Koordinaten abgeändert)
https://www.clever-tanken.de/tankstelle_liste?lat=50.7627913&lon=6.98905083&ort=53332+Bornheim&spritsorte=5&r=10
https://www.clever-tanken.de/tankstelle_liste?lon=6.98905083&lat=50.7627913&spritsorte=5&ort=53332+Bornheim&r=10&sort=None&page=2
ich suche folgende Auflistung (nur die Tankstellen, die max 10.0 km entfernt sind).
Spalte E: Tankstellenbetreiber
Spalte F: Str. / Hausnr.
Spalte G: PLZ/Ort
Spalte I: Preis
In Spalte H will ich die Entfernung schreiben, jedoch von Hand die Fahrstrecke, nicht die Luftlinienentfernung von der Internetseite.
Ist das inzwischen möglich?
Danke
Christian
Anzeige
AW: aber mal eine Frage an Günther...
18.01.2021 19:30:20
Yal
Hallo Christian,
ob Günther eine Beitrag liest, wo er bisher nicht beteiligt war...
Ich habe
https://tankbillig.info/53332_Bornheim/diesel
angezapft, weil der PLZ und Kraftstofart sich sich so schön in der Adresse einbauen lassen.
Mit Clever-tanken sollte es aber kein Problem sein. Tankbillig gibt aber nur 16 Ergebnisse.
Schwierig ist das Navigieren innerhalb des html. Da fehlen Anhaltspunkten. Man muss die Entwickler-Tool des Webbrowser verwenden, um die richtige Stelle zu erwischen.
https://www.herber.de/bbs/user/143096.xlsx
Viel Spass damit
Yal
Anzeige
AW: aber mal eine Frage an Günther...
18.01.2021 23:01:59
Yal
... Clever-tanken hat auch den PLZ + Sprit. (ist aber sehr langsam)
r ist der Umkreis also hier 10km.
So würde die PQ aussehen (eine einzige Abfrage. Ich habe mir Mühe gegeben :-)
let
Quelle = Web.Page(Web.Contents("https://www.clever-tanken.de/tankstelle_liste?ort=53332& _
spritsorte=3&r=10")),
Data0 = Quelle{0}[Data],
Html = Data0{0}[Children],
Body = Html{1}[Children],
Div1_5 = Body{5}[Children],
Div2_0 = Div1_5{0}[Children],
Div3_2 = Div2_0{2}[Children],
Div4_1 = Div3_2{1}[Children],
Div5_0 = Div4_1{0}[Children],
Div6_0 = Div5_0{0}[Children],
#"Erweiterte Children" = Table.ExpandTableColumn(Div6_0, "Children", {"Kind", "Name", " _
Children", "Text"}, {"Kind.1", "Name.1", "Children.1", "Text.1"}),
#"Erweiterte Children.1" = Table.ExpandTableColumn(#"Erweiterte Children", "Children.1", {" _
Kind", "Name", "Children", "Text"}, {"Kind.2", "Name.2", "Children", "Text.2"}),
#"Erweiterte Children1" = Table.ExpandTableColumn(#"Erweiterte Children.1", "Children", {" _
Kind", "Name", "Children", "Text"}, {"Kind.3", "Name.3", "Children.1", "Text.3"}),
#"Erweiterte Children.2" = Table.ExpandTableColumn(#"Erweiterte Children1", "Children.1", {" _
Kind", "Name", "Children", "Text"}, {"Kind.4", "Name.4", "Children", "Text.4"}),
#"Erweiterte Children2" = Table.ExpandTableColumn(#"Erweiterte Children.2", "Children", {" _
Kind", "Name", "Children", "Text"}, {"Kind.5", "Name.5", "Children.1", "Text.5"}),
#"Erweiterte Children.3" = Table.ExpandTableColumn(#"Erweiterte Children2", "Children.1", {" _
Kind", "Name", "Children", "Text"}, {"Kind.6", "Name.6", "Children", "Text.6"}),
#"Erweiterte Children3" = Table.ExpandTableColumn(#"Erweiterte Children.3", "Children", {" _
Kind", "Name", "Children", "Text"}, {"Kind.7", "Name.7", "Children.1", "Text.7"}),
#"Erweiterte Children.4" = Table.ExpandTableColumn(#"Erweiterte Children3", "Children.1", {" _
Kind", "Name", "Children", "Text"}, {"Kind.8", "Name.8", "Children", "Text.8"}),
#"Andere entfernte Spalten" = Table.SelectColumns(#"Erweiterte Children.4",{"Text.8", "Text. _
6", "Text.5", "Text.4"}),
#"Hinzugefügte bedingte Spalte" = Table.AddColumn(#"Andere entfernte Spalten", "Entfernung", _
each if [Text.8] = null then null else if Text.EndsWith([Text.8], " km") then [Text.8] else null),
#"Hinzugefügte bedingte Spalte1" = Table.AddColumn(#"Hinzugefügte bedingte Spalte", " _
Anbieter", each if [Text.8] = null then null else if not Text.EndsWith([Text.8], " km") then [Text.8] else null),
#"Hinzugefügte bedingte Spalte2" = Table.AddColumn(#"Hinzugefügte bedingte Spalte1", "Ort",  _
each if [Text.6] = null then null else if Value.Is(Value.FromText(Text.Start([Text.6], 5)), type number) then [Text.6] else null),
#"Hinzugefügte bedingte Spalte3" = Table.AddColumn(#"Hinzugefügte bedingte Spalte2", " _
Adresse", each if [Text.6] = null then null else if not Value.Is(Value.FromText(Text.Start([Text.6], 5)), type number) then [Text.6] else null),
#"Hinzugefügte bedingte Spalte4" = Table.AddColumn(#"Hinzugefügte bedingte Spalte3", " _
Preis1", each if [Text.4] = null then null else if [Text.4] = "" then null else if [Text.4]="-.--" then "0" else if Value.Is(Value.FromText([Text.4]), type number) then [Text.4] else null),
#"Hinzugefügte bedingte Spalte6" = Table.AddColumn(#"Hinzugefügte bedingte Spalte4", " _
Aktualisierung", each if Text.Length(if Value.Is(Value.FromText([Text.4]), type text) then [Text.4] else "")> 30 then [Text.4] else null),
#"Nach unten gefüllt" = Table.FillDown(#"Hinzugefügte bedingte Spalte6",{"Entfernung", " _
Anbieter", "Adresse", "Preis1", "Text.5", "Aktualisierung"}),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Nach unten gefüllt", "Preis",  _
each [Preis1]&[Text.5]),
#"Entfernte Spalten" = Table.RemoveColumns(#"Hinzugefügte benutzerdefinierte Spalte",{"Text. _
8", "Text.6", "Text.5", "Text.4", "Preis1"}),
#"Neu angeordnete Spalten" = Table.ReorderColumns(#"Entfernte Spalten",{"Aktualisierung", " _
Anbieter", "Adresse", "Ort", "Entfernung", "Preis"}),
#"Gefilterte Zeilen" = Table.SelectRows(#"Neu angeordnete Spalten", each ([Preis]  null  _
and [Preis]  "0Uhr") and ([Ort]  null))
in
#"Gefilterte Zeilen"
Viel Spass damit
Yal
Anzeige
AW: aber mal eine Frage an Günther...
18.01.2021 23:09:44
Christian
Hallo Yal,
ich weiß dass es auch mit PLZ geht, aber Koordinaten sind halt genauer.
Aber nehm es mir bitte nicht übel es ist nach 23 Uhr. Ich werde es morgen testen, wenn ich geschlafen habe. Gute Nacht.
DAnke aber schonmal für die Mühe.
Gruß
Christian
AW: aber mal eine Frage an Günther...
19.01.2021 07:01:18
Christian
Hallo Yal,
danke für die viele Mühe.
ZUerst sagte man mir, es würde ein Komma fehlen.
Habe dann alle _ am Ende der Zeilen gelöscht, dann wurde der Code akzeptiert.
Aber dann kam nach mehreren Minuten die Meldung
Expression.Error: Der Vorgang konnte nicht abgeschlossen werden, da die Enumeration nicht genügend Elemente enthielt.
Details:
[Table]
und der Schritt Quelle hat sich geöffnet, wenn ich auf Einstellungen bearbeiten klicke.
Gruß
Christian
Anzeige
AW: aber mal eine Frage an Günther...
19.01.2021 08:57:22
Yal
Hallo Christian,
ich bin entsetzt, dass Du dich nicht sofort um 23:00 ans Werk gemacht hast :-))
Die "_" sind vom Forum verursacht: Der Fenster nimmt es als VBA-Code und schneidet nach VBA "_"-Muster. Passt für PQ nicht.
Ich habe bei erster Korrektur ein davon in der Adresse vergessen (2te Zeile) und auch "..Enumaration nicht genug Elemente.." bekommen.
Leider gibt es keine langfristige Garantie, dass der Code, der gestern funktioniert hat, heute noch tut. Es ist von solchen Anbieter üblich, den Datenmodell regelmässig durchzuwirbeln, um den Data-Grabbing zu unterbinden.
Im Grob ist hier nicht mehr als ein Vorschlag, wie man an der Sache rangehen kann. Schon, dass Du mit diesem Kauderwelch zurecht kommst, ist ein Zeichen, dass es auf fruchbare Boden angekommen ist.
Viel Spass damit (meiner habe ich gehabt ;-)
VG
Yal
Anzeige
AW: aber mal eine Frage an Günther...
19.01.2021 12:34:37
Christian
Hallo Yal,
nur verständnishalber, gestern hat es noch funktioniert und heute bei dir auch nicht mehr?
Gruß
Christian
AW: aber mal eine Frage an Günther...
19.01.2021 13:21:44
Yal
Ich habe alle Underscroe korrigiert (Leerzeichen davor auch beseitigen) und es hat bei mir wieder funtkioniert.
Parallel hatte ich aber die Adresse im Internet Explorer abgefragt, es kann sein, dass da Cookies gesetzt werden, die sonst diese Abfrage nach Cookies ja/nein stören kann.
VG
Yal

9 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige