Autom. Aktualisierung von Daten aus dem Internet

Hallo,

Ich habe eine Excel-Datenbank mit Aktienindices erstellt. Die Daten stammen aus verschiedenen Homepages. Nun würde ich gerne eine Funktion erstellen, dass die Daten entweder alle 5min oder auch real time automatisch aktualsisiert werden (die Homepage aktualisiert sich in real time). Falls das nicht geht, kann ich auch per klick oder so eine aktualsierung durchführen? eine interessante zusatzoption wäre noch ein funktion einzufügen, die ein alert ausführt, sobald ein index 10% fällt oder so.

Vielen Dank für eure Hilfe

Mario

Moin!

Wenn Du die Datenbank per ‚Externe Daten-> Webabfrage‘ erstellt hast, müsste eigentlich ein Druck auf ‚F9‘ (Neu berechnen) genügen um zu aktualisieren. Die entsprechende VBA-Funktion heisst ‚Calculate‘.

Wenn Du eh schon bei VBA bist, dann bau Dir ein Dialogfeld mit einem Timer-Element, das nacheinander folgendes macht: Alte in extra Tabelle kopieren, Calculate, neue Werte mit alten vergleichen (per Formel oder nacheinander per VBA, dann aber mit Warnungs-Message).

Gruß Hans

Vielen Dank. Diese ‚Externe Daten-> Webabfrage‘-Funktion ist ja genial. Die kannte ich gar nicht. Ich bin eben noch Anfäger und kenne VBA noch gar nicht. Könntest du mir vielleicht gleich den Code schreiben, falls dies nicht zu viel Aufwand ist? Absonsten könntest du mir einfach einen Link geben, wo man am besten VBA lernt. Oder sende mir doch bitte so oder so einen Link, denn VBA müsste ich sicherlich lernen, doch diese spezifische Aufgabe wird warscheinlich nirgens beschrieben sein.

Meri Mario

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

wenn es so einfach wäre…
die besten Anleitungen gibt es nur auf gedruckten Büchern…

auf Homepages findest Du meistens keine gratis-Anleitungen sondern wenn dann nur fertige Makros, die oft noch nicht mal erklärt werden…

ansonsten…
http://www.fuckinggoogleit.com/

Moin!

Vielen Dank. Diese ‚Externe Daten-> Webabfrage‘-Funktion
ist ja genial. Die kannte ich gar nicht. Ich bin eben noch
Anfäger und kenne VBA noch gar nicht. Könntest du mir
vielleicht gleich den Code schreiben, falls dies nicht zu viel
Aufwand ist?

Ich hab 'nen Bekannten, der genau das (in komfortabler Version) für seinen Auftraggeber programmiert und pflegt. Er lebt inzwischen davon. Interesse? Soviel zum Thema kleiner Finger, ganze Hand.

Absonsten könntest du mir einfach einen Link
geben, wo man am besten VBA lernt. Oder sende mir doch bitte
so oder so einen Link, denn VBA müsste ich sicherlich lernen,
doch diese spezifische Aufgabe wird warscheinlich nirgens
beschrieben sein.

Das mit Sicherheit nicht, und einen Link kann ich Dir auch nicht geben, da ich mir VBA selbst beigebracht habe, allein mit der eingebauten Hilfe von Excel und VBA. Und mit einem supertollen Feature von Excel: dem Macrorecorder. Der kann Aktionen von Dir aufzeichnen und in VBA übersetzen. Da kann man dann recht viel von lernen.

Probiers doch mal aus: Rechtsklick auf die Symbolleiste, dann werden Dir einige zusätzliche Funktionsleisten angeboten. Mach einen Haken vor Visual Basic. Es erscheint eine neue kleine Leiste (VBLeiste), mit ein paar Symbolen. Jetzt öffne ein leeres Blatt. Auf der VBLeiste klickst Du jetzt den runden blauen Punkt an: Alles was Du jetzt tust wird aufgenommenund der Punkt verwandelt sich in ein Quadrat. Schreibe in ein paar Zellen ein paar Zahlen. Jetzt schreibe in Zellen Formeln, die auf andere Zellen Bezug nehmen. Nun bewegst Du dich noch ein bisschen im Blatt (vorzugsweise per Tastatur also STRG+Pfeil oder so). Zum Schluss markiere noch einen Bereich und kopiere ihn in ein anderes Blatt.
Jetzt klicke auf das Quadrat in der VBLeiste: die Aufnahme stoppt.
Um das Ganze anzusehen mache folgendes:
Auf der VBLeiste gibt es ein Fenster-ähnliches Symbol, den Visual-Basic-Editor. Klicke darauf oder tippe alternativ ALT+F11. Der Editor öffnet sich. Im Fenster am linken Rand steht irgendwo ‚VBAProject(DeinMappenname)‘. Erweitere diesen Zweig, bis du einen Zweig Module findest. Den erweiterst Du auch, und doppelklickst auf den Eintrag Modul1. Im rechten Fenster erscheint der Code. Er beginnt mit Sub Makro1() und dann kommt alles, was Du ausgeführt hast. Ändere ein paar Sachen und wechsle dann zu Excel und führe Makro1 aus: Extras->Makro->Makros->Makro1->Ausführen und schau Dir die Auswirkungen an.
Jetzt heisst es nur noch: Immer wieder aufnehmen, ansehen, ändern, probieren, Hilfe lesen. Wenn Du das dann im Griff hast kannst Du anfangen Dialogfelder zu bauen. Wenn Du soweit bist, und/oder ein spezifisches Problem hast, melde Dich wieder, sag mir was Du alles versucht hast, und wo das Problem liegt.

Gruß Hans

Vielen Dank. Diese ‚Externe Daten-> Webabfrage‘-Funktion
ist ja genial. Die kannte ich gar nicht. Ich bin eben noch
Anfäger und kenne VBA noch gar nicht. Könntest du mir
vielleicht gleich den Code schreiben, falls dies nicht zu viel
Aufwand ist? Absonsten könntest du mir einfach einen Link
geben, wo man am besten VBA lernt. Oder sende mir doch bitte
so oder so einen Link, denn VBA müsste ich sicherlich lernen,
doch diese spezifische Aufgabe wird warscheinlich nirgens
beschrieben sein.

Meri Mario

Hallo Mario,

hier mal ein Grundgerüst um eine Tabelle mit Webabfragen zu aktualiseren und Auszuwerten. Die Aktualisierung wird mit dem Öffen der Datei gestartet, kann man aber auch auf manuell umstellen.
Bei der Auswertung bin ich mal davon ausgegangen, dass Die daten immer in den gleichen Zellbereich eingelesen werden Fall das Ganze dynamisch wird, dann muss man etwas mehr Aufwand bei der Ermittlung des Datenbereichs treiben.
Umgesetzt ist das Ganze mit Excel97, bei neueren Excel-Versionen ist möglicherweise das Einrichten der Webabfragen etwas komfortabler umgesetzt.

mfg
Franz

Der folgende Code muss im VBA-Editor unter „DieseArbeitsmappe“ eingefügt werden. Er sorgt für den automatischen Start der Aktualisierung und beendet vor dem Schließen der Datei den Timer.

Private Sub Workbook\_BeforeClose(Cancel As Boolean)
 On Error Resume Next
 'Aktualiserungen abbrechen
 Application.OnTime earliesttime:=Zeitpunkt, Procedure:="Aktualisieren", Schedule:=False
End Sub

Private Sub Workbook\_Open()
 'Kursaktualisierung starten
 Call Aktualisieren
End Sub

Diesen Code in ein Modul kopieren und Namen von Daeien und Tabellen anpassen. Den Teil mit de Prüfung von Kursänderungen muss du natürlich auch an den Aufbau deiner Daten anpassen.

Public Zeitpunkt As Date
Private IndexMonitoring As Boolean

Sub Aktualisieren()
'
 Dim wb As Workbook, wks1 As Worksheet, i As Integer, DeltaZeit As Date
 Dim Kurse As Range, Zeile As Range
 Set wb = Workbooks("AktienkurseUpdate.xls") 'Arbeitsmappe mit den Daten
 Set wks1 = wb.Sheets("Tabelle1") ' Tabelle mit den zuaktualisierenden Daten
 Set Kurse = wks1.Range("A2:F23") 'Bereich mit Kursdaten, die ständig aktualisiert werden
 On Error Resume Next ' überspringt evtl. Fehler beim Aktualiseren der Querytables
 'Alle Webabfragen aktualisieren
 For i = 1 To wks1.QueryTables.Count
 wks1.QueryTables(i).ResultRange.QueryTable.Refresh BackgroundQuery:=False
 Next i
 ' Kontrolle der Kurs-Abweichungen
 ' In diesem Beispiel steht der Kursname in Spalte B, der Vortagskurs in Spalte C, der Aktuelle Kurs in Spalte F
 For Each Zeile In Kurse.Rows
 With wks1
 Delta = (.Cells(Zeile.Row, "F") - .Cells(Zeile.Row, "C")) / .Cells(Zeile.Row, "F")
 If Delta 

Vielen Dank für deine ausführliche Beschreibung. Ich werde mich gleich hineinstürzen.

Hallo Franz

Vielen Dank für den Code.
Ich habe zwar die Aktualisierung nun in den Eigenschaften der Externen Daten-Tabelle erstellen können, doch der Code sollte mir helfen ein Alert-Mail herauschicken zu können.

Merci Mario

Hallo,

Soweit habe ich nun eine Tabelle die durch Externe Daten einer Homepage alle 5min aktualisiert und zudem habe ich durch eine IF-Funktion in einer Zeile ein Alert eingebaut, der „Alert“ anzeigt, wenn der Index um 1% gesunken ist und „Minus“ wenn der Index minus ist und „GOOD“ wenn der Index im positiven ist. Soweit schon sehr gut.
Mein Ziel wäre nun, dass ein Email an mich gesendet wird, sobald diese Zeile „Alert“ anzeigt. Dies habe ich mit einem Makro Visual Basics versucht. Doch der funktioniert nur, wenn man etwas auf dem Arbeitsblatt ausführt. Kann man dies anders ausführen? Bsp. ein Formel im Arbeitsblatt die ein E-mail rausschickt (die könnte dann in die IF-Formel eingefügt werden). Oder kann man das anders machen?

Merci Mario

Schau mal in die VBA-Hilfe unter ‚Mailer‘

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]