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

Nach IE.goBack "Zugriff verweigert"

Nach IE.goBack "Zugriff verweigert"
01.07.2017 09:35:29
Martin
Hallo an alle!
Habe bei der Abfrage von einer Website mit der IE.Goback Funktion ein Problem.
Nach dem ich auf Goback war gibt er mir immer den fehler in der Variable einLink & dieLinks den Fehler "Zugriff verweigert" aus!
Kann mir wer von euch sagen was ich dabei falsch mache?
Lg Martin
Sub TableExample()
Dim ist As Worksheet
Dim ws As Worksheet
Dim IE As Object
Dim doc As Object
Dim strURL As String
Dim i As Long
Dim href As Object
Dim dieLinks As Object
Dim einLink As Object
Dim Zeile As Long
Dim Anbieter As Worksheet
Dim AnbieterNr As Worksheet
Dim abfAnbieter As String
Dim nextLink As Object
Dim nr As Long
strURL = "https://www.e-control.at/konsumenten/service-und-beratung/toolbox/tarifkalkulator" ' replace with URL of your choice
Set IE = CreateObject("InternetExplorer.Application")
With IE
'Clear_Temp_Files()
'Shell "RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8 "
'Clear_Cookies()
'Shell "RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2"
'Clear_Form_Data()
'Shell "RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 16"
.Visible = True
'Application.Wait (Now + TimeValue("0:00:10"))
.navigate strURL
'# Navigate to one URL
Do Until .readyState = 4: DoEvents: Loop
Do While .Busy: DoEvents: Loop
Application.Wait (Now + TimeValue("0:00:05"))
IE.document.GetElementById("_tk_portlet_WAR_tk_:tk-form-start:tk-index-search-form-zip").Value = _
Sheets("Tarife e-control config").Range("A1").Value
IE.document.GetElementById("_tk_portlet_WAR_tk_:tk-form-start:tk-index-search-form-electricity-consumption").Value = _
Sheets("Tarife e-control config").Range("A2").Value
'click the 'go' button
IE.document.GetElementById("_tk_portlet_WAR_tk_:tk-form-start:tk-index-search-form-search-button").Click
Do Until .readyState = 4: DoEvents: Loop
Do While .Busy: DoEvents: Loop
Application.Wait (Now + TimeValue("0:00:10"))
Set doc = IE.document.GetElementsByTagName("table")
Set dieLinks = IE.document.all.Item(Zeile).document.Links
Set ws = Sheets("einLink")
Set ist = Sheets("Info")
Set Anbieter = Sheets("Stocks")
nr = 24
abfAnbieter = Anbieter.Cells(nr, 3)
For Each einLink In dieLinks
Zeile = Zeile + 1
nr = nr
If einLink.innertext = abfAnbieter Then
Stop
ist.Cells(Zeile, 1) = einLink.href
ist.Cells(Zeile, 2) = "'" & IE.document.all.Item(Zeile).outertext
nr = nr + 1
abfAnbieter = Anbieter.Cells(nr, 3)
einLink.Click
Application.Wait (Now + TimeValue("0:00:10"))
IE.GoBack
Application.Wait (Now + TimeValue("0:00:20"))
Else
ws.Cells(Zeile, 1) = einLink.href
ws.Cells(Zeile, 2) = "'" & einLink.outertext
End If
Next

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nach IE.goBack "Zugriff verweigert"
01.07.2017 16:43:26
Zwenn
Hallo Martin,
ich schon wieder ;-) Warum hast Du denn einen neuen Thread eröffnet? Abgesehen davon, dass das hier nicht gern gesehen ist, schadest Du Dir in diesem Fall auch selbst damit. Niemand kennt Dein eigentliches Anliegen und keiner wird sich durch ein Makro wühlen, zu dem er kein Vorwissen hat. Vor allem nicht, wenn die Mappe mit den benötigten Tabellen dazu fehlt. Das nur als Anmerkung. Wir machen jetzt mal hier weiter.
Also, Du greifst auf die Seite zu, setzt die Postleitzahl und den Stromverbrauch ein, dann sendest Du das Ganze weg und die Seite mit den ganzen Anbietern wird aufgerufen. Soweit so gut.
Dann liest Du lauter Links aus, von denen ich nicht weiß, was Du damit anstellen willst(?) Wir hatten doch gestern bereits fetgestellt, dass Dir Links auslesen bei Deinem Ursprungsproblem gar nicht weiterhilft. Abgesehen davon ist kein einziger Link zu auch nur einem einzigen der aufgeführten Anbieter dabei. Dafür über 700 andere. (Ja, ich habe mir die Tabellen angelegt, die Dein Makro verwendet.)
Du öffnest dann eine Schleife und springst mit GoBack eine Seite zurück. Du springst also wieder auf die Seite, in die Postleitzahl und Stromverbrauch eingetragen werden. Das funktioniert auch, wie man im Browser beobachten kann. Dann versuchst Du innerhalb der Schleife einen Link aufzurufen den es nicht gibt aus einer Tabelle, die leer ist. Dann versucht das Makro mit GoBack eine Seite zurück zu springen. Da Du aber nach wie vor auf der Ausgangsseite bist, gibt es keine Seite davor und Du erhältst die Fehlermeldung Zugriff verweigert.
Alles in allem funktioniert Dein Makro so nicht für den Zweck, für den Du es benötigst. Du kommst damit gar nicht bis in die dritte Ebene, die die Daten enthält, an die Du eigentlich ran willst. Es sind auch noch mehr Fehler von Aufbau her drin. Wie gesagt, brauchst Du z.B. die ganzen ausgelesenen Links gar nicht und es fehlt auch mindestens eine Schleife. Weiterhin ist der Code schwer nachvollziehbar, weil Du z.B. die IDs fest einkodierst. Es ist besser, sie in Variablen oder Konstanten abzulegen, die sprechende Namen habe. Dann kannst Du nach 3 Wochen in den Quelltext gucken und ihn relativ intuitiv lesen und wieder erfassen, was Du da eigentlich machst. Zusätzliche Kommentare sind auch nützlich. Abgesehen davon kannst Du das Makro dann sehr einfach anpassen, falls sich die IDs im HTML Code mal ändern sollten. Dann änderst Du die nämlich an genau einer Stelle im Code.
Ich gehe jetzt mal davon aus, dass es mehrere Postleitzahlen gibt, zu denen Du Daten auslesen willst. Gib mir mal ein paar Stunden Zeit. Eigentlich habe ich die nicht, aber wie ich gestern schon schrieb, finde ich die Problemstellung mit dem GoBack interessant und werde deshalb mal etwas programmieren, was im besten Fall am Ende Dein Problem löst.
Brauchst Du das für die Arbeit? Weil Du am Wochenende dran sitzt. Muss ja was wichtiges sein. Wird schon schief gehen ;-) Welche Daten willst Du eigentlich alle aus Ebene drei auslesen?
Viele Grüße bis hier hin,
Zwenn
Anzeige
AW: Nach IE.goBack "Zugriff verweigert"
01.07.2017 17:39:54
Martin
Hallo Zwenn Danke für deinen Einsatz!
Ich dachte eigentlich es wird mit der Zeit für einen Beitrag zu unübersichtlich und wollte nun das in 2 kleinere Teile unterteilen! Deswegen auch den Teil hier und auch der 2. Teil unter "Script umbau Tabelle auslesen" Dort steht mehr drinnen was ich genau möchte.
Ich habe übrigens schon einiges mehr an Script als ich hier zuletzt gepostet habe. Übrigens funktioniert mein Script bishin auf die 3. Ebene aber danach springt er in einen Zugriff verweigert.
Mein Code ist übrigens noch nicht richtig in der reinfolge aber das ist bewusst so inzwischen fürs testen. Danke übrigens nochmal das Du Dir Zeit nimmst dafür ja ich werde es in zufunkt für die Arbeit brauche möchte anhand der Daten im Excel Berechnungen über die Angebote am markt machen.
Ich habe mir übrigens gerade mal VBA beigebracht und bin kein Spezialist was das betrifft. Ich such nach Codeschnipsel im Internet und bastle mir das alles selbst zusammen.
Dafür bin ich glaube ich schon ganz schön weit gekommen. :-)
Hier nochmal mein komplettes Script:
Option Explicit
Sub TableExample()
Dim ist As Worksheet
Dim ws As Worksheet
Dim IE As Object
Dim doc As Object
Dim strURL As String
'Dim i As Long
Dim href As Object
Dim dieLinks As Object
Dim einLink As Object
Dim Zeile As Long
Dim Anbieter As Worksheet
Dim AnbieterNr As Worksheet
Dim abfAnbieter As String
Dim nextLink As Object
Dim nr As Long
strURL = "https://www.e-control.at/konsumenten/service-und-beratung/toolbox/tarifkalkulator" _
' replace with URL of your choice
Set IE = CreateObject("InternetExplorer.Application")
With IE
'Clear_Temp_Files()
'Shell "RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8 "
'Clear_Cookies()
'Shell "RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2"
'Clear_Form_Data()
'Shell "RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 16"
.Visible = True
'Application.Wait (Now + TimeValue("0:00:10"))
.navigate strURL
'# Navigate to one URL
Do Until .readyState = 4: DoEvents: Loop
Do While .Busy: DoEvents: Loop
Application.Wait (Now + TimeValue("0:00:05"))
IE.document.GetElementById("_tk_portlet_WAR_tk_:tk-form-start:tk-index-search- _
form-zip").Value = _
Sheets("Tarife e-control config").Range("A1").Value
IE.document.GetElementById("_tk_portlet_WAR_tk_:tk-form-start:tk-index-search- _
form-electricity-consumption").Value = _
Sheets("Tarife e-control config").Range("A2").Value
'click the 'go' button
IE.document.GetElementById("_tk_portlet_WAR_tk_:tk-form-start:tk-index-search- _
form-search-button").Click
Do Until .readyState = 4: DoEvents: Loop
Do While .Busy: DoEvents: Loop
Application.Wait (Now + TimeValue("0:00:10"))
Set doc = IE.document.GetElementsByTagName("table")
Set dieLinks = IE.document.all.Item(Zeile).document.Links
Set ws = Sheets("einLink")
Set ist = Sheets("Info")
Set Anbieter = Sheets("Stocks")
nr = 24
'Set AnbieterNr = Sheets("Stocks").Cells(nr, 3)
abfAnbieter = Anbieter.Cells(nr, 3)
'For einLink = dieLinks To IE.document.all.Item(Zeile).document.Links
For Each einLink In dieLinks
Zeile = Zeile + 1
'Stop
'Schau dir jetzt im Lokalfenster die Eigenschaften von einLink an.
'Da gibt es so allerhand was du auswerten kannst.
'If Zeile = 803 Then
nr = nr
If einLink.innertext = abfAnbieter Then
Stop
ist.Cells(Zeile, 1) = einLink.href
ist.Cells(Zeile, 2) = "'" & IE.document.all.Item(Zeile).outertext
nr = nr + 1
abfAnbieter = Anbieter.Cells(nr, 3)
einLink.Click
Application.Wait (Now + TimeValue("0:00:10"))
Set doc = IE.document.GetElementsByTagName("table")
Dim rng As Range
Dim tbl As Object
Dim rw As Object
Dim cl As Object
Dim tabno As Long
Dim nextrow As Long
Dim i As Long
Dim xl As String
Dim y As Integer
Set ws = Sheets("detail")
For Each tbl In doc
tabno = tabno + 1
nextrow = nextrow + 1
Set rng = ws.Range("B" & nextrow)
rng.Offset(, -1) = "Table " & tabno
For Each rw In tbl.Rows
For Each cl In rw.Cells
rng.Value = cl.innertext
Set rng = rng.Offset(, 1)
i = i + 1
Next cl
nextrow = nextrow + 1
Set rng = rng.Offset(1, -i)
i = 0
Next rw
Next tbl
ws.Cells.ClearFormats
Application.Wait (Now + TimeValue("0:00:10"))
IE.GoBack
Application.Wait (Now + TimeValue("0:00:20"))
'ReDim einLink As Object
Else
ws.Cells(Zeile, 1) = einLink.href
ws.Cells(Zeile, 2) = "'" & einLink.outertext
End If
'End If
Next
'.Quit
'For Each href In IE.document.GetElementsByTagName("a")
'For i = 1 To IE.document.all.Length
'If IE.document.all.Item(i).href = "https://www.e-control.at/konsumenten/service-und- _
beratung/toolbox/tarifkalkulator?p_p_id=tk_portlet_WAR_tk&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_tk_portlet_WAR_tk__facesViewIdRender=%2FsearchResult.xhtml#" Then
'IE.document.all.Item(i).Click
'While IE.Busy
'DoEvents
'Wend
'Do Until IE.readyState = READYSTATE_COMPLETE
'DoEvents
'Loop
'Exit For
'End If
'End If
'Next i
'Next href
FindAllLinks doc, IE
'GetAllTables doc
End With
End Sub
Sub FindAllLinks(doc As Object, IE As Object)
Dim ws As Worksheet
Dim dieLinks As Object
Dim einLink As Object
Dim tbl As Object
Dim L As Long
Dim Zeile As Long
Dim tblanz As Long
'Set IE = CreateObject("InternetExplorer.application")
'Set tblanz = doc.all.Length
Set dieLinks = doc.Item(L).document.Links
Set ws = Sheets("einLink")
For Each einLink In dieLinks
Zeile = Zeile + 1
'Stop
'Schau dir jetzt im Lokalfenster die Eigenschaften von einLink an.
'Da gibt es so allerhand was du auswerten kannst.
ws.Cells(Zeile, 1) = einLink.href
ws.Cells(Zeile, 2) = "'" & einLink.outertext
'For Zeile = 1 To einLink.document.all.Length
'Set .document.all.Item(Zeile) = einLink.document.all.Item(B)
'If einLink.document.all.Item(Zeile).outertext = "Verbund AG" Then
'IE.document.all.Item(Zeile).Click
'While IE.Busy
'DoEvents
'Wend
'Do Until IE.readyState = READYSTATE_COMPLETE
'DoEvents
'Loop
'Exit For
'End If
Next einLink
'Exit For
GetAllTables doc
'End With
End Sub


Sub GetAllTables(doc As Object)
' get all the tables from a webpage document, doc, and put them in a new worksheet
Dim ws As Worksheet
Dim rng As Range
Dim tbl As Object
Dim rw As Object
Dim cl As Object
Dim tabno As Long
Dim nextrow As Long
Dim i As Long
Dim xl As String
Dim y As Integer
Set ws = Sheets("Stocks")
For Each tbl In doc
tabno = tabno + 1
nextrow = nextrow + 1
Set rng = ws.Range("B" & nextrow)
rng.Offset(, -1) = "Table " & tabno
For Each rw In tbl.Rows
For Each cl In rw.Cells
rng.Value = cl.innertext
Set rng = rng.Offset(, 1)
i = i + 1
Next cl
nextrow = nextrow + 1
Set rng = rng.Offset(1, -i)
i = 0
Next rw
Next tbl
ws.Cells.ClearFormats
Zeilenumbruch_entfernen ws
End Sub
Sub Zeilenumbruch_entfernen(ws)
Dim Regex As Object
Dim meAr()
Dim nCount&, MaxRow&, MaxColumn, lngTeil&, lngStep&, i
Dim rngBereich As Range
Set Regex = CreateObject("Vbscript.Regexp")
With ws
MaxRow = .Cells(.Rows.Count, 1).End(xlUp).Row
MaxColumn = ActiveCell.SpecialCells(xlLastCell).Column
'MsgBox MaxColumn
Set rngBereich = .UsedRange
lngStep = (MaxRow - 1) / 5
With Regex
.MultiLine = True
.Pattern = "\n"
.Global = True
End With
For i = 1 To MaxColumn
For lngTeil = 1 To MaxRow - 1 Step lngStep
meAr = .Range(rngBereich(lngTeil, i), rngBereich(lngTeil + lngStep - 1, i)).Value2
For nCount = 1 To UBound(meAr)
'ersetze Zeilenumbruch durch nichts oder ein anderes Zeichen
'meAr(nCount, 1) = Regex.Replace(meAr(nCount, 1), "^")
meAr(nCount, 1) = Regex.Replace(meAr(nCount, 1), "")
Next nCount
rngBereich(lngTeil, i).Resize(UBound(meAr)) = meAr
Erase meAr
Next lngTeil
Next i
End With
ZahlenRaus ws
End Sub

Sub ZahlenRaus(ws)
Dim lZeile    As Long
Dim iLaenge   As Integer
Dim sZeichen  As String
Dim sNeuwert  As String
Dim s As String
With ws ' den Tabellenblattnamen ggf. anpassen !
For lZeile = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
's = .Range("c" & lZeile).Value
'If s = Mid(s, Len(s) - 6, 6) = vbCrLf Then
' s = Mid(s, 0, Len(s) - 2)
'End If
sNeuwert = ""
For iLaenge = 1 To Len(.Range("C" & lZeile).Value)
sZeichen = Mid(.Range("c" & lZeile).Value, iLaenge, 1)
If Not IsNumeric(sZeichen) Then
sNeuwert = sNeuwert & sZeichen
End If
Next iLaenge
.Range("c" & lZeile).Value = Replace(sNeuwert, ",%", "")
'.Range("c" & lZeile).Value = Replace(sNeuwert, ";%", "")
'.UsedRange.Replace What:="%", Replacement:="", LookAt:=xlWhole
s = .Range("c" & lZeile).Value
.Range("c" & lZeile).Value = VBA.Replace(s, Chr(13), "")
s = .Range("c" & lZeile).Value
'.Range("c" & lZeile).Value = VBA.Replace(s, Chr(32), "")
Next lZeile
End With
TrimmenVonWerten ws
End Sub
Sub TrimmenVonWerten(ws)
Dim Bereich As Range
Dim Zeilemax As Long
Dim zelle As Range
With ws
Zeilemax = .UsedRange.Rows.Count
Set Bereich = .Range("c1:B" & Zeilemax)
For Each zelle In Bereich
If IsError(zelle.Value) = False Then
zelle.Value = RTrim(zelle.Text)
'zelle.Value = Replace(zelle.Value, Chr(32), "")
End If
Next zelle
End With
End Sub

Anzeige
AW: Nach IE.goBack "Zugriff verweigert"
01.07.2017 18:09:26
Zwenn
Ok,
ich habe mir einen kurzen Überblick verschafft, was Du machst (nicht im Detail, weil ich es einfach anders mache). Ich baue mal parallel zu Deiner Arbeit etwas, was anders aussehen wird.
Ich finde es gut, dass Du Dich an solche Problemstellungen rautraust! Nur so kommt man vorwärts. Es beeindruckt mich, wenn jemand vorher nix mit einer Sache zu tun hatte und dann sagt: "Ich mach das jetzt einfach mal." Gehe ich recht in der Annahme, dass Du vorher nicht nur kein VBA konntest, sondern vom Programmieren ansich noch nix wußtest? Dafür finde ich Dein Ergebnis bisher wirklich gut :-)
Du hast leider nicht gesagt, was Du aus Ebene 3 alles auslesen willst ;-)
Ich melde mich später wieder mit meinem Ergebnis. Solltest Du relativ zeitnah einfließen lassen, welche Werte Du brauchst, erstelle ich das entsprechend. Ansonsten musst Du selber ran ;-)
Viele Grüße,
Zwenn
Anzeige
AW: Nach IE.goBack "Zugriff verweigert"
01.07.2017 18:34:07
Martin
Hallo Swenn!
Hatte vor ca. 10 Jahren einmal HTML & PHP usw. gelernt aber nie wirklich genutzt. Dh. keine Erfahrungen gesammelt.
Habe in meiner Abfrage folgende Informationen aus der Website heraus geholt:
IstWerte:
Userbild
Ich würde den Code gerne umbauen sodass er aber wie bei meinen SollWerten erkennbar aus Spalte A:A die Felder abfragt und in Spalten C,D,E,usw das Ergebnis reinschreibt
Weiters soll er mir oben in den Zeilen 1 & 2 darüber schreiben um welchen Anbieter & um welches Produkt es sich handelt.
SollWerte:
Userbild
Das ist im Prinzip alles was ich benötige.
Lg Maritn
Anzeige
AW: Nach IE.goBack "Zugriff verweigert"
01.07.2017 18:44:00
Zwenn
Hi Martin,
habe es auch grade mal nachvollzogen. Ich komme jetzt auf 38 Spalten in der Ergebnistabelle. Vielleicht brauchtst Du nicht alle. Ich hoffe aber auch, das keine fehlt. Ich glaube, ich habe da einige im Kopf, die Du bisher nicht gesehen hast. Auch im Bezug auf mehrere PLZ, die Du auslesen willst. Vielleicht liege ich auch falsch. Egal, dann lässt Du die überflüssigen für Deine Berechnungen einfach weg.
Ich lege dann mal los. Kann auch bis morgen dauern. Ich muss mich erstmal um die Mechanik kümmern, das Auslesen klappt dann quasi von allein, wenn man erstmal in der dritten Ebene ist.
Viele Grüße,
Zwenn
Anzeige
AW: Nach IE.goBack "Zugriff verweigert"
01.07.2017 19:33:12
Martin
Hi Swenn,
ja ich brauch im Prinzip wie in der Tabelle mit den Sollwerten links in A die Namen aus der Spalte die ich suche wie z.B. Energiepreis, Arbeitspreis,etc.. und darüber die Information zu dem Energielieferanten und dem Produkt.
Also ich möchte z.b. Eingeben in Spalte A Energiepreis und daneben soll der Preis aller Lieferanten kommen.
Darüber zum Energiepreis soll natürlich automatisch der Lieferant und das Produkt kommen.
Das bedeutet Spalte A soll Dynamisch anpassbar sein welche Informationen ich gerade benötige.
Danke nochmal!
Lg Martin
AW: Nach IE.goBack "Zugriff verweigert"
01.07.2017 20:11:10
Zwenn
Auch wenn ich mir sicher bin, dass es so klappt, wie Du es Dir vorstellst. Die Informationen zu einem Datensatz stehen am Ende alle in einer Zeile. Du musst einfach nur das verwenden, was du brauchst. Das ist ja vom Auslesen der Daten völlig unabhängig. Jedenfalls solange man alle Werte erwischt, die Du benötigst.
Ich bin jetzt bei 57 Spalten, die am Ende gefüllt sein werden (was dann eher morgen ist). Naja, habe halt noch etwas nachgesehen, was unterschiedliche Treffer so als Ergebnis auswerfen. Das muss allerdings nicht heißen, dass das erschöpfend ist.
Erwähnte ich eigentlich, dass mein Job auch mit Datenbeaschaffung zu tun hat? ;-) Wir recherchieren im Internet nach Produkt- und Markenpiraterie sowie Hehlerware. Da gibt es die unterschiedlichsten Aufgabenstellungen, bezogen auf Plattformen. Informationsbeschaffung ist ein sehr zentrales Element.
Anzeige
AW: Nach IE.goBack "Zugriff verweigert"
02.07.2017 08:41:49
Martin
Informationsbeschaffung ist in der heutigen Zeit ja sicher ein sehr interessantes Thema. Wenn man hierzu ein wenig die Nachrichten verfolgt sind da sehr viele firmen angefangen von Social Media bis hin zur Politik und viele Unternehmen daran interessiert. Ja das ist ein sehr Zentrales Thema. Die frage dabei ist immer für wen ist es gut und wem schadet es!?
Ich selbst hätte dabei auch einige Anforderungen an solche Themen- Aber eher zum Thema Grunddatenerfassung!
Ist VBA die einzige Programmiersprache die Du kannst oder gibt es da noch andere wie z.B. Java?
Lg Martin
AW: Nach IE.goBack "Zugriff verweigert"
02.07.2017 13:53:56
Zwenn
Hallo Martin,
nachdem gestern Abend etwas dazwischen gekommen ist, habe ich mich jetzt wieder ran gesetzt. Habe noch etwas nachgedacht und mir einen Mechanismus überlegt, der nach einer Unterbrechung des Makros dafür sorgt, dass an der Stelle weiter gemacht wird, an der unterbrochen wurde. Das ist eigentlich nix weiter, als ein Zähler, der auch dafür genutzt wird, den Fortschritt anzuzeigen. Man muss ihn nur richtig verarbeiten.
Ja, Datenbeschaffung ist ein weites Feld. Die Frage, wem sie schadet und wem sie nützt finde ich dabei auch wichtig. Abgesehen davon gibt es auch Grenzen, die man beachten muss. Z.B. ist Datenschutz natürlich ein großes Thema dabei. Mit am wichtigsten finde ich aber die Frage, was mit den gesammelten Daten passiert. Wir werten die z.B. dahingehend aus, ob es Anomalien im Marktverhalten von Verkäufern gibt. Z.B. unauskömmliche Preise über einen längeren Zeitraum; Dinge in einer relevanten Anzahl im Portfolio, die gestohlen wurden; zusammenbringen unterschiedlicher Accounts, die zu einem Netzwerk oder zu einer Person gehören; usw.
Mit VBA habe ich 2006 mal aus ganz pragmatischen Gründen Gründen angefangen. Ich kam als freier Mitarbeiter in eins von zwei Teams, die tagsüber an unterschiedlichen Orten mit der gleichen Excel-Liste arbeiteten. Damit die Liste bei beiden Teams zu Beginn eines Arbeitstages immer den gleichen Bearbeitungsstand hatte, haben sich Abends zwei Leute hingesetzt und haben diese Listen manuell gegeneinander abgeglichen. Das fand ich total merkwürdig. Es dauert lange, es ist fehleranfällig und es ist total stupide Arbeit.
Also bin ich nach dem ersten Abend in dem Job in die nächste Buchhandlung gegangen, habe mir ein VBA für Excel Buch gekauft und habe mich noch am gleichen Abend hingesetzt, um das Abgleichen der Listen zu automatisieren. Ich habe da ein paar Abende für gebraucht, weil ich es auch so umsetzen wollte, wie die Teams händisch gearbeitet haben. Da wurde viel mit Einfärbungen von Zellen gemacht und so. Fand ich alles furchtbar kompliziert, aber ich wollte natürlich auch nicht als der Klugscheißer dastehen, der neu dazu kommt und mal eben die Arbeitsweise en passant ändert. Die Kollegen fanden das dann richtig gut. Keiner musste sich mehr abends hinsetzen und die Listen waren in ein paar Sekunden wieder auf gleichem Stand.
Ansonsten komme ich eigentlich von C, ganz ursprünglich mal von Turbo Pascal. Das ist aber alles schon lange her. Java habe ich mir angesehen und habe auch einen MOOC am openHPI mitgemacht. Unterm Strich habe ich da aber bisher wenig Erfahrung mit. Mit Webprogrammierung habe ich mich auch mal eine Zeit lang beschäftigt. Das kommt mir jetzt für solche Problemstellungen der Datenbeschaffung natürlich sehr zu pass. Im Oktober letzten Jahres habe ich allerdings ein Fernstudium an der Fernuni Hagen in Informatik aufgenommen. Da prügelt man sich natürlich erstmal vor allem mit Mathe rum ;-) Die setzen für die Vermittlung von Programmierkonzepten am Anfang auch noch Pascal ein. Es geht dann aber direkt Richtung Objektorientierung, wofür Java genommen wird.
So, ich hoffe ich bekomme das Makro heute noch soweit fertig, dass Du damit was anfangen kannst.
Viele Grüße,
Zwenn
Anzeige
AW: Nach IE.goBack "Zugriff verweigert"
02.07.2017 20:24:04
Martin
Hallo Swenn,
sehr interessant was Du hier schriebst. Es war sehr interessant! Ich habe in Java eine Datenbank die sich Mementos nennt und eine API App von Android ist dort werden einige Routinen in Java programmiert deswegen mein Interesse an Java. Das wäre aber nicht nur eine kleine Routine wie diese in VBA sondern eher ein Datenbank, Java && App- Integrations Job auf längerer Basis. Ist etwas sehr abwechslungsreich was unter anderem auch mit Datenbeschaffung zu tun hat.
Hoffe Du kommst weiter bei dem Script in VBA! Hatte heute nicht viel Zeit aus beruflichen Gründen.
Von wo kommst Du eigentlich?
Lg Martin
Anzeige
AW: Nach IE.goBack "Zugriff verweigert"
03.07.2017 01:34:05
Zwenn
Hallo Martin,
das Makro funktioniert jetzt. Was noch fehlt, sind die eigentlichen Inhalte, die ausgelesen werden sollen. Ich lese bisher nur en paar Werte zu Testzwecken aus. Das ist jetzt aber nicht mehr das große Problem. Es ist nur einfach schon spät heute.
Die Seite selbst reagiert mitunter sehr langsam. Die eigentlich ausreichende Absicherung des Ladens einer Seite über die Abfrage, ob der Ladeprozess abgeschlossen ist, funktioniert hier nicht. Das hattest Du ja aber auch schon festgestellt und hattest in Deinen Versuch bereits Pausen eingebaut. Ich habe die Pausen mit 10 Sekunden recht konservativ gesetzt. Es kann aber trotzdem passieren, dass eine Pause nicht ausreicht. In dem Fall kann das Makro einfach wieder gestartet werden. Es wird an der Stelle fortgesetzt, an der abgebrochen wurde. Durch die 10 Sekunden Pause dauert das Auslesen eines Anbieters eine halbe Minute + x.
In der hochgeladenen Mappe sind die Daten meines letzten Tests noch enthalten. Für eigene Versuche kannst Du die einfach löschen. Alles was Du einsetzen musst sind die Postleitzahlen und die Verbräuche dazu. Alles andere macht das Makro.
Schau mal, ob das so funktioniert, wie Du es Dir vorgestellt hast. Die gewünschten auszulesenden Daten können dann noch relativ einfach nachgepflegt werden.
https://www.herber.de/bbs/user/114648.xlsm
Viele Grüße,
Zwenn
Anzeige
AW: Nach IE.goBack "Zugriff verweigert"
03.07.2017 10:00:05
Martin
Hallo Swenn,
danke Dir vielmals für das durchdachte Script. Das funktioniert besser als ich erwartet habe.
Das war das Positive vorausgeschickt :-)
Nachdem ich mir nun nähere Gedanken dazu gemacht habe und den Kopf nun von der Programmierung und Fehlersuche und Problembehandlung etwas frei habe, ist mir nun einiges klar geworden nachdem Du mir damit Offline Daten zur Verfügung stellst. Manchmal braucht man den Blick von einem weiter entfernten Standpunkt aus um auf die tatsächlichen Probleme drauf zu kommen.
Also korrigiere mich falls ich falsch liege aber: Eine Online Abfrage beim Kunden fällt neben möglicher schlechter Internet Anbindung, zu langer Wartezeit für einen Datensatz Client seitig denke ich mal ins Wasser. Ich komme hier nach meiner Berechnung nach auf ca 36min ("10sec, für Abfrage PLZ,KWh,click", "10 sec für Detail abfrage", "10sec, goback") also insg. 20sec takt schleife x ca. 110 Anbieterprodukte pro Abfrage + X für abfragezeit & reinschreiben in Tabelle.
Also muss ich mit offline Daten arbeiten!? Dabei wird es schwieriger an ein genaues Ergebnis ran zu kommen, denn: Wien 23 Bezirke, von 1000-10000 kwh, mit Daten die sich tägl bis wöchentlich ändern. Eine Abfrage für jede einzelne Kwh fällt dabei eher mal raus. Bei einer Abfrage in 1.000er schritten wäre das machbar. Dann muss ich für einen vergleich auf oder abrunden von 1000 bis 1500 und 1501 bis 2000 Kwh. Ok das wäre noch halbwegs realistisch. Bei der Berechnung komme ich dann alleine nur für Wien als "Update Funktion" Server seitig auf ca. 8,8 Tage bei 37.950 Datensätzen für Wien bei 15T kwh in 1T schritten.
Soviel zu Wien und bei den Niederösterreichischen Kollegen wird es dann aber spannend. Die Berechnung spar ich mir jetzt mal vorerst.
Was meinst Du wie ich das am besten lösen soll? Offline ist sicher die einzige Möglichkeit die sinnvoll ist aber die Datenmenge mit der Abfragezeit kann man schätze ich Server-seitig mit einer Hostinglösung noch optimieren oder? Die frage ist wie bekomme ich den Datensatz Client-seitig in das Excel dann rein? Per Datenbank-abfrage oder per Offline-File?
Lg Martin
AW: Nach IE.goBack "Zugriff verweigert"
03.07.2017 10:45:27
Martin
Hallo Swenn,
ich nochmal!
PS.: Zur Erklärung: Eigentlich war mein Plan A: Ich frage die Daten ab, direkt beim Kunden und mit den hinterlegten Formeln in Excel berechne ich dem Kunden die tatsächlich günstigsten Anbieter am Markt im Vergleich mit dem Angebot das ich ihm mache. Langfristig gesehen! Das Problem ist die lange Abfrage Zeit: Wenn ich z.B. genau 1656 Kwh Abfrage. Denn der gesamte Kundentermin dauert eigentlich nur 30min bis ich aber die Abgefragten Daten dem Kunden vorlegen kann vergeht alleine schon 38min Pause dazwischen. Deswegen muss ich mir hier eine bessere Lösung überlegen. Da hast Du mich nun mit deinem Script auf die Möglichkeit der Offline Daten gebracht. Nun muss ich halt dabei Abstriche machen bei der Genauigkeit im Vergleich auf 1000 er schritte. Sonst wird das mit einer wöchentlichen Abfrage nichts. Oder meinst Du das es hier noch andere Möglichkeiten gibt?
Lg Martin
AW: Nach IE.goBack "Zugriff verweigert"
03.07.2017 12:20:40
Zwenn
Hallo Martin,
ich habe keine Ahnung, was Du mit den Daten eigentlich anfangen willst. Wenn ich allerdings von den 37.950 Datensätzen nur für Wien ausgehe, die Du genannt hast und mal utopische 2 Sekunden ansetze, bis ein Datensatz komplett abgeschlossen wurde (also mit hin- und herspringen auf den Seiten), komme ich allein für diese Datenmenge noch auf 21 Stunden Auslesezeit. Da steht also die Frage im Raum, ist Dir der Zeitbedarf bei der Menge an Daten, die Du brauchst, vorher nicht klar gewesen?
Was Du mit einer Serverlösung meinst weiß ich nicht und ich habe auch keine Ahnung, was Du mit Daten meinst, die online oder offline zur Verfügung stehen. Es liegt jetzt ein Excel Makro vor, mit dem Daten ausgelesen werden können. Das passiert ja immer auf einem Client. Die Daten liegen anschließend immer offline vor. Wie Du die dann weiter verarbeitest ist unabhängig von der Methode der Beschaffung. Du kannst die in Excel verarbeiten oder in eine Datenbank importieren. Die Datenbank kannst Du dann natürlich über ein VPN von aussen zugänglich machen. So gesehen sind die Daten dann wieder online.
Um den Auslesevorgnag zu beschleunigen, kann man zum einen Versuchen die Pausenzeiten zu optimieren, aber wirklich etwas bringen würde Parallelisierung. Sprich, mehrere Postleitzahlen parallel auslesen. VBA selbst ist nicht multithreadingfähig. Du kannst Das Makro aber natürlich einfach auf mehreren Rechnern gleichzeitig laufen lassen. Das ist aber recht kostenintensiv, was den Strombedarf angeht, weil auch mehrere Rechner für die Datenmengen, die Du haben willst, dauerhaft laufen müssten. Es kann auch sein, dass der Seitenbetreiber solche parallelen Zugriffe einfach stoppt. Da bleibt nur ausprobieren.
Weiterhin ist mir nicht klar, warum Du 1 KWh Schritte auslesen willst. Auf den Seiten der Anbieter, von denen das Makro die Daten am Ende holt, gibt es auch einen Kasten "Preisdetails". Da stehen die KWh Abschnitte drin, die einem bestimmten Preis pro KWh zugeordnet sind. Diese Information kannst Du doch nutzen, um die Ausleseschritte zu steuern. Das Makro müsste halt auf die Werte in diesem Kasten reagieren. Das ist sicher machbar, aber auch nicht wirklich trivial.
Du kannst dir dann auf Basis dieser Grenzwerte einen eigenen Rechner bauen, mit dem Du alle benötigten Werte (Steuern und was weiß ich) zu einem bestimmten KWh Wert ausrechnest. Das macht das Ganze dann natürlich noch aufwendiger, für Zwischenwerte innerhalb eines Tarifblocks aber sehr viel schneller.
Dann gibt es auch Infos dazu, wann der Preis das letzte Mal geändert wurde. Diese Info steht bereits in der Seite, in der alle Anbieter aufgelistet sind. Leider steht da allerdings auch oft einfach drin "Preisgarantie für X Monate". Diese Laufzeit tackert sicher den Preis zum Vertragsabschluss für den genannten Zeitraum fest.
Es gibt auf den Seiten auch noch viele andere Infos. Ob und wie die Dir für Dein Vorhaben helfen, kannst Du nur allein entscheiden.
Unterm Strich würde ich sagen, vielleicht ist Excel einfach das falsche Werkzeug für Deine Zwecke der Datenbeschaffung. Ein Python Script z.B. würde wahrscheinlich schneller sein, weil Python sich gut parallelisieren lässt und auch gute Bibliotheken mitbringt. Vielleicht ist auch die Quelle der Daten die falsche. Ich weiß nicht, ob es noch andere Quellen gibt, aber auch die jetzt verwendete Seite muss die Daten irgendwo her haben. Zumindest hat sie sie alle vorliegen. Je nach Aufgabenstellung sind vielleicht auch gar nicht sämtliche Daten von allen Anbietern erforderlich.
Alles in Allem solltest Du Dein Projekt ausgehend vom Ziel vielleicht nochmal überdenken. Scheint ja doch was größeres zu sein ;-)
Viele Grüße,
Zwenn
AW: Nach IE.goBack "Zugriff verweigert"
03.07.2017 13:51:58
Martin
Hallo Swenn,
als meine Rechnung ergibt etwas anderes: 10 sec für Tarifkalkulatorabfrage nicht inkludiert (15*23*10=3450sec=57,5min)
Abfrage für Wien:
In 1000er schritten Abfragen:
kwh (für 15000kwh)
15
Bezirke
x 23
Anbieter/Produkte derzeit ca.
x 110
Abfrage gesamt
= 37950
sec pro Abfrage
x 20
Sec gesamt
=759000
Minuten gesamt
=12650
std. gesamt
210,8333333
Tage gesamt
=8,784722222
Das Ausrechnen der Daten funktioniert nur wenn das Angebot für egal ob 1000kwh 5000kwh und 10000kwh gleichbleibend wäre. Das ist es aber nicht da Lieferanten und Produkte sich da leider ändern und plötzlich andere Produkte & teilweise sogar Lieferanten zur Verfügung stehen.
Das Angebot ändert sich außerdem fast täglich wöchentlich etc... "Angebot & Nachfrage am Energiemarkt) Preisaktionen etc...
Perl wäre nicht schlecht habe aber 0 Ahnung davon. Später wenn ich mal Geld verdiene sicher zu Andenken.
Ich denke das passt schon so wie Du es geschrieben hast! Das Programm sollte die Abfrage wöchentlich updaten und soweit wie möglich automatisch laufen können und bei Fehler einfach weiter machen. hoffe das geht soweit. Die Daten würde ich mir dann in eine Datenbank laden und von dort aus werde ich per Excel einfach auf meinen Client die Abfrage machen für den Datensatz den ich brauche.
Lg Martin
AW: Nach IE.goBack "Zugriff verweigert"
03.07.2017 16:14:22
Zwenn
Hallo Martin,
ich bin bei meiner Rechnung einfach von Deinen 37.950 Datensätzen für Wien ausgegangen und habe die 2 Sekunden angesetzt, um zu zeigen, dass es selbst mit dieser geringen Zeitspanne pro Auslesevorgang immer noch 21 Stunden dauern würde, alle Daten zu holen. Deshalb schrieb ich "utopische 2 Sekunden". Deine Rechnung bildet ja eher die (momentane) Realität ab.
Wenn Du die Daten in eine Datenbank übernehmen willst, dann sollte noch ein eindeutiger Index mitgeneriert werden. Dann erfährt ein Produkt bei einem Import auch wirklich ein Update, bei sich ändernden Preisen. Ansonsten legst Du das gleiche Produkt X Mal in der Datenbank an. Wobei ich natürlich nicht weiß, was für ein DBMS Du verwenden wirst.
Ich probiere nachher zu Hause nochmal etwas aus, um zu sehen, ob die Auslesezeit sich senken lässt. Problematisch bleibt es aufgrund der schieren Datenmenge, die Du brauchst, aber trotzdem.
Viele Grüße,
Zwenn
AW: Nach IE.goBack "Zugriff verweigert"
04.07.2017 08:48:37
Martin
Hallo Swenn,
die Offline Speicherung ist ja nur nötig wenn das mit der Abfragezeit so bleibt und nicht schneller geht. Das ist nur mein "Plan C". = Die Datenbank brauche ich nur falls die Abfragezeit zu lange dauert.
Mein "Plan A" ist die Abfrage direkt beim Kunden Vorort. Da man aber wegen einer schlechten Internetverbindung ich die Abfragezeit nicht 100% voraussetzen kann ist es halt eher unwahrscheinlich das man die Abfrage Vorort machen kann.
Mein "Plan B" wäre ich lasse das Script auf einem Server laufen der direkt an einer schnellen Internetverbindung sitzt. z.B. "Hoster, 1&1, World4You, etc" - Rootserver, den brauche ich sowieso. Die Anfrage von meinem Client wird an den Server gesendet der startet die Abfrage braucht dafür nur z.B. 5min und der Client bekomme das Ergebnis zurück für genau den Datensatz den er braucht. Damit brauche ich nur eine Abfrage über alle Angebote ca. 110 Produkte.
Hoffe ich verwirre Dich damit nicht :-) aber die 3 Möglichkeiten habe ich so wie ich das sehe.
Der Index wäre mir schon wichtig damit ich ggf zu meinem Plan C wechseln kann. Als Datenbank würde ich Oracel-SQL nehmen da habe ich jemanden der mir das Programmieren kann.
Es wäre halt so eine Update Funktion sinnvoll da sonst meine Offline-Daten im Excel auch immer mehr werden oder?
Kannst Du mir bitte einmal die restlichen Daten von den Feldern füllen damit diese mal vollständig werden?
Habe da zwar schon ein wenig herum probiert checke aber noch nicht ganz wie das weiter funktioniert mit der Abfrage der restlichen Datenfelder.
Lg Martin
AW: Nach IE.goBack "Zugriff verweigert"
04.07.2017 10:42:34
Zwenn
Hallo Martin,
gestern bin ich leider zu nix mehr gekommen und gehe nun davon aus, dass ich es heute Abend schaffe, weitere Ausleseroutinen für weitere Daten einzupflegen. Der Mechanismus dabei ist immer der gleiche. Genau so, wie ich ihn schon für den Netzbeteiber und Stromlieferanten programmiert habe.
Man sucht im Quelltext raus, wo der gesuchte Wert steht und wie man ihn über ID, CSS Formatierung, Tag Name oder Attribut eingrenzen kann. Den eingegrenzten Abschnitt schrumpft man dann über die gleichen Methoden soweit ein, bis man den Wert direkt mit innertext auslesen kann. Oft geht das in zwei Schritten. Manchmal muss man den ausgelesenen String dann noch weiter zerteilen, um an den Wert zu kommen, den man braucht. So wie beim Auslesen der Anzahl der Anbieter. Da arbeite ich nochmal mit Split. Das ist aber reines Programmierhandwerk.
Wie Du die Abfragen über einen Hoster beschleunigen willst, würde mich interessieren. Solange Du die Daten über die HTML Oberfläche der Seite auslesen musst, wird Dir auch die schnellste zu bekommende Internetverbindung nix bringen. Die 10 Sekunden, die im Moment hart als Pause eingecodet sind, bleiben auch da 10 Sekunden. Abgesehen davon weiß ich nicht, wie Du Excel bei einem Hoster laufen lassen willst. Oder hast Du noch ein anderes Script über PHP und JavaScript oder sowas?
Die Updatefunktion für Preis- oder sonstige Veränderungen zu einem Produkt werde ich nicht in das Makro integrieren. Zunächst mal weiß ich gar nicht, was sich da alles ändern kann und ich werde mich da auch ganz sicher nicht reindenken. Abgesehen davon ist es auch vergebene Liebesmüh, wenn Du die Daten sowieso in eine DB übernehmen wirst.
In Deinen Tabellen, die angelegt werden, müssen ja eindeutige Schlüssel hinterlegt werden, an denen ein Datensatz wiedererkannt wird. Der Index, an den ich gedacht hatte ist dafür nicht geeignet. Da hatte ich einen Denkfehler. Wenn Du die Daten importierst, ist die Quelle egal. Sobald so ein Schlüssel erkannt wird, wird der entsprechende Datensatz nicht neu angelegt, sondern aktualisiert. Diese Automatik ist also so gesehen ganz automatisch vorhanden. Dein DB Programmierer muss nur wissen, wie er die Schlüssel zu setzen hat. Ihm das zu sagen ist Dein Job.
Was Deine Arbeitsweise mit der Datenbeschaffung angeht, würde ich einfach verschiedene Sachen ausprobieren. Am Anfang würde ich damit beginnen mit einem "Backup" zum Kunden zu fahren. Das heißt, Du liest die benötigten Daten für den Kunden bereits vorher aus und hast sie dann, wie Du es nennst, offline vorliegen. Beim Kunden kannst Du versuchen, die Daten live zu holen. Wenn das nicht in adequater Zeit funktioniert, greifst Du auf das Backup zurück.
Wenn Du damit rausgefunden hast, was Du willst, z.B. der günstigste Anbieter oder der umweltfreundlichste oder was weiß ich, kannst Du nochmal eine direkte Abfrage live im Tarifrechner vornehmen, nur um zu gucken, ob sich in den paar Stunden seit Erstellung des Backups etwas an den relevanten Daten geändert hat. Du kannst so eine Abfrage auch für die besten zwei oder drei ermittelten Tarife machen. Ich kann mir nicht vorstellen, dass es da plötzlich einen Anbieter auf den hinteren Pätzen gibt, der genau in der Zeitspanne den Markt von hinten aufrollt.
Das ist jetzt nur eine Überlegung. Ich habe natürlich absolut keine Ahnung, wie der Markt wirklich funktioniert, in dem Du arbeitest.
Viele Grüße,
Zwenn
PS: Weil Du neulich fragtest und ich Nachts nicht mehr drauf eingegangen war, ich wohne in Berlin
AW: Nach IE.goBack "Zugriff verweigert"
05.07.2017 00:05:09
Zwenn
Hallo Martin,
ich habe mich heute nun erstmal den Laufzeittests gewidmet. Dazu habe ich nun drei unterschiedliche Pausen im Konstantenteil definiert, um die eingebauten Pausen unabhängig voneinander steuern zu können. Die Pause vom eintragen der Postleitzahl und des Verbrauchs zum Übergang auf die Seite mit allen Anbieterlinks, habe ich am Ende einfach auf 10 Sekunden belassen. Die fällt ja eigentlich nicht weiter ins Gewicht, weil sie nur alle 100 + x Aufrufe zum Tragen kommt.
Interessanter sind da schon die beiden anderen Pausen. Einmal nach dem Anklicken eines Anbieterlinks und dann nach dem GoBack auf die Anbieterliste. Im Büro konnte ich die auf 3 Sekunden absenken. Zu Hause funktionierte das nicht. Es lief dann stabil mit beiden Pausen auf 4 Sekunden.
Unterm Strich dauert ein Auslesezyklus für einen Anbieter mit hin- und herspringen zwischen 11 und 12 Sekunden. Das ist etwa 50 % schneller, als vorher. Das Interessante ist, dass diese Pausen selbst nicht immer ausschlaggebend sind. Es geht vor allem darum, wie schnell die Seite ist, wenn diese künstlichen Pausen nicht mehr benötigt werden, sondern die Kontrolle wirklich auf das Abwarten des fertigen Auslesens der Seite durch den Browser übergeht. Also die Zeile nach der Pause im Quellcode. Alles in allem liegt die Auslesezeit für eine Postleitzahl und einem Verbrauch aber immernoch im Bereich zwischen 20 und 25 Minuten. Je nach Anzahl der Anbieter.
Darüber hinaus habe ich noch ein paar andere Sachen umgestellt, was das Auslesen der eigentlichen Daten angeht. Das bezieht sich aber vor allem darauf, dass ich die Werte, die ich dafür vorher in den Konstanten hatte, nun doch in den Code runtergezogen und hart einkodiert habe. Es wird alles nur an einer Stelle benötigt und um das Auslagern in Konstanten konsequent durchzuziehen, müssten auch noch andere Werte dorthin ausgelagert werden. Das macht das Ganze dann aber wesentlich unübersichtlicher.
Ausserdem gab es noch einen Fehler in der Routine, die feststellt, an welcher Stelle das Makro nach einer Unterbrechung wieder einsetzen soll. Es gab eine Situation, bei der die letzte Zeile noch einmal ausgelesen wurde. Das passiert nun nicht mehr.
Abschließend habe ich mich nun bis eben nochmal der Ergebnistabelle gewidmet. Allerdings nur ihrem Aussehen und den Datenfeldern, die dort aufgenommen werden sollen/ können. Zusätzlich zu dem, was da jetzt vorgesehen ist, gibt es noch weitere Informationen, die vielleicht wichtig sind. Ich habe z.B. ein Unternehmen gesehen, zu dem die Information vorliegt, dass ein Insolvenzverfahren eingeleitet wurde. Das so eine Info vorliegt, wird über ein grafisches Symbol ausgewiesen. Über diese grafischen Symbole werden auch Infos wie reiner Onlinetarif, reiner Ökostrom und noch ein paar andere ausgewiesen.
Werte, wie der Bruttogesamtpreis, müssen über eine Formel errechnet werden. Der hängt nämlich davon ab, welche der bis zu vier Rabatt Optionen angewählt wurde. Ich würde beim Auslesen die Haken als Ja übernehmen, die bei Aufruf der Anbieterseite vorausgewählt sind. Man kann dann aber auch in Deiner Tabelle die anderen Rabatte anwählen, bzw. die bereits ausgewählten abwählen. Das wären dann einfach Einträge in den entsprechenden Ja/ Nein Spalten. Wie Du das in einer DB löst, musst Du Dir überlegen. Ich würde da fertig berechnete Gesamtwerte wahrscheinlich einfach weglassen.
Neben den jetzt eingetragenen Datenfeldern als Kopfzeile, habe ich in den bestehenden Gruppen keine weiteren gefunden. Ob es Sinn macht, die wirklich alle auszulesen, sei mal dahingestellt.
Hier ist erstmal der aktuelle Stand. Im Makro Code findest Du auch schon den nächsten HTML Block, dem die Kontaktdaten der Stromanbieter entnommen werden.

Die Datei https://www.herber.de/bbs/user/114700.xlsm wurde aus Datenschutzgründen gelöscht


Viele Grüße,
Zwenn
AW: Nach IE.goBack "Zugriff verweigert"
06.07.2017 08:19:08
Martin
Hallo Swenn,
bin gestern leider zu nichts gekommen. Habe mir das Script jetzt angesehen und ausprobiert. Ist von der Geschwindigkeit her schon um einiges schneller. Dachte halt das es einen unterschied macht wenn die Internetverbindung bei einem Hoster schneller ist und die Server Konfiguration besser ist als mein Heim -PC das es dadurch schneller wird von der Abfragezeit her. (früher vor ca. 10-15 Jahren :-) war das noch so.) Bin halt schon ein Oldie denke ich.
Das mit dem Beispiel HTML habe ich mir auch angeschaut, Danke für die Info. Probiert habe ich es noch nicht ob und wie ich hier den Split ansetzten muss da ich leider das noch immer nicht ganz nachvollziehen kann wie das mit den einzelnen Zeilen funktionieren soll. Es fehlt glaube ich ja noch die Routine dazu damit diese abgerufen werden können. Muss man dafür bei jedem einzelnen Feld eine eigene schleife setzen "also fix Eincoden?"
Gibt es für den eindeutigen Schlüssel nicht ein Gültigkeits-Datum oder zuletzt aktualisiert am oder so ähnliches in der Seite?
Das mit dem "Backup" und den Vergleich der Besten Anbieter ist eine gut Idee. Wenn ich einen Kunden habe der z.B, 8561 Kwh hat frage ich beim Backup 9000 Kwh ab und dann online die Plätze 1,2,3 mit den tatsächlichen 8561 Kwh also dem tatsächlichen Ergebnis. Funktioniert das?
Die Informationen "Insolvenzverfahren, reiner OnlineTarif, etc..." ist auch sehr hilfreich. Ist mir noch gar nicht vorher aufgefallen das diese Information vorhanden ist, bezogen auf Insolvenz.
Berlin ist nicht gerade gleich um die Ecke um Dich mal auf ein Bier einzuladen... :-)
Lg Martin

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige