Hallo VBA-Experten,
vieleicht kann mir einer helfen. Ich habe eine, wie ich finde, elegante Methode entdeckt, um gezielte Daten
aus einer Internetseite zu importieren. Das Beispielskript habe ich auf
meine Bedürfnisse versucht anzupassen. Zum einen ein eingeloggtes und
zum anderen ein ausgeloggtes angepasstes Skript. Gelingt mir aber nur
teilweise, weil ich das Skript nicht ganz verstehe, obwohl ich schon
einige VBA-Projekte realisiert habe. HTML ist eben
Neuland für mich.
Eingeloggtes Angepasstes Skript:
Ausgeloggtes Angepasstes Skript:
Meine Anliegen mit dieser Anfrage sind:
Vielen Dank schon im Voraus
Ferenz
vieleicht kann mir einer helfen. Ich habe eine, wie ich finde, elegante Methode entdeckt, um gezielte Daten
aus einer Internetseite zu importieren. Das Beispielskript habe ich auf
meine Bedürfnisse versucht anzupassen. Zum einen ein eingeloggtes und
zum anderen ein ausgeloggtes angepasstes Skript. Gelingt mir aber nur
teilweise, weil ich das Skript nicht ganz verstehe, obwohl ich schon
einige VBA-Projekte realisiert habe. HTML ist eben
Neuland für mich.
Eingeloggtes Angepasstes Skript:
Quellcode
- Option Explicit
- 'Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'For 32 Bit Systems
- #If VBA7 Then
- Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'For 64 Bit Systems
- #Else
- Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'For 32 Bit Systems
- #End If
- Sub Einloggen()
- Dim IEApp As Object
- Dim IEDocument As Object
- Dim sSource, sTable As String
- Dim lPosBeg, lPosEnd As Long
- Dim objData As DataObject
- Set IEApp = CreateObject("InternetExplorer.Application")
- IEApp.Visible = True
- IEApp.Navigate "https://www.targobank.de/de/online-banking/login.cgi#r=head-login"
- Do: Loop Until IEApp.Busy = False
- Do: Loop Until IEApp.Busy = False
- Set IEDocument = IEApp.Document
- Do: Loop Until IEDocument.ReadyState = "complete"
- IEDocument.getElementById("_userid").Value = "Mustermann"
- IEDocument.getElementById("_pwduser").Value = "12345"
- Do: Loop Until IEDocument.ReadyState = "complete"
- IEDocument.getElementById("submit1").Click
- Do: Loop Until IEDocument.ReadyState = "complete"
- IEApp.Navigate "https://www.targobank.de/kurse/index.html?ciwi=CIWI0427&ID_NOTATION=31345909&addEvent=filter_wpsuche"
- Do
- Sleep 100
- Loop Until IEApp.Busy = False
- Sleep 100
- sSource = IEApp.Document.DocumentElement.outerHTML
- lPosBeg = InStr(1, sSource, "<table", vbTextCompare)
- lPosEnd = InStr(1, sSource, "</table>", vbTextCompare)
- sTable = Mid(sSource, lPosBeg, (lPosEnd - lPosBeg))
- Set objData = New DataObject
- objData.SetText ""
- objData.PutInClipboard
- objData.SetText sTable
- objData.PutInClipboard
- Worksheets.Add after:=Worksheets(Worksheets.Count)
- ActiveSheet.Name = "temp1"
- ActiveSheet.Paste
- Set IEDocument = Nothing
- Set IEApp = Nothing
- End Sub
Ausgeloggtes Angepasstes Skript:
Quellcode
- Option Explicit
- 'Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'For 32 Bit Systems
- #If VBA7 Then
- Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'For 64 Bit Systems
- #Else
- Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'For 32 Bit Systems
- #End If
- Sub Ausgeloggt()
- Dim IEApp As Object
- Dim IEDocument As Object
- Dim sSource, sTable As String
- Dim lPosBeg, lPosEnd As Long
- Dim objData As DataObject
- Set IEApp = CreateObject("InternetExplorer.Application")
- IEApp.Visible = True
- IEApp.Navigate "https://www.targobank.de/kurse/index.html?ciwi=CIWI0427&ID_NOTATION=31345909&addEvent=filter_wpsuche"
- Do: Loop Until IEApp.Busy = False
- Do: Loop Until IEApp.Busy = False
- Set IEDocument = IEApp.Document
- '--- Einloggen
- ' Do: Loop Until IEDocument.ReadyState = "complete"
- ' IEDocument.getElementById("_userid").Value = "Mustermann"
- ' IEDocument.getElementById("_pwduser").Value = "12345"
- Do: Loop Until IEDocument.ReadyState = "complete"
- IEDocument.getElementById("submit1").Click
- ' Do: Loop Until IEDocument.ReadyState = "complete"
- ' IEApp.Navigate "http?:"
- Do
- Sleep 100
- Loop Until IEApp.Busy = False
- Sleep 100
- sSource = IEApp.Document.DocumentElement.outerHTML
- lPosBeg = InStr(1, sSource, "<table", vbTextCompare)
- lPosEnd = InStr(1, sSource, "</table>", vbTextCompare)
- sTable = Mid(sSource, lPosBeg, (lPosEnd - lPosBeg))
- Set objData = New DataObject
- objData.SetText ""
- objData.PutInClipboard
- objData.SetText sTable
- objData.PutInClipboard
- Worksheets.Add after:=Worksheets(Worksheets.Count)
- ActiveSheet.Name = "temp1"
- ActiveSheet.Paste
- Set IEDocument = Nothing
- Set IEApp = Nothing
- End Sub
Meine Anliegen mit dieser Anfrage sind:
- Welches ist das "getElementByID()" des fetten (rot/grün) Kurses im Quellcode der folgenden Internetseite? targobank.de/kurse/index.html?…9&addEvent=filter_wpsuche
- Welches ist das "getElementByID()" des Bestätigungs-Buttons im Quellcode der folgenden Login-Seite? targobank.de/de/online-banking/login.cgi#r=head-login
- Erbitte um Erläuterung des VBA-Skripts bezüglich der folgenden Beispiele;
- a.
[color=#0000CD]Do: Loop Until[/color]
Diese Schreibweise kam bei meinen Lehrmaterialien nie vor, sondern immer mehrzeilig.
- Wie wird der Befehl abgearbeitet und wieso kommt der Befehl doppelt vor?
- Wie werden diese Befehle abgearbeitet?
- Wie wird der Befehl abgearbeitet und wieso kommt der Befehl doppelt vor?
- Wozu wird "Sleep" im Skript benötigt?
- a.
- Wieso funktioniert die IF-Bedingung außerhalb einer Sub, wenn das Raute-Symbol "#" vorneweg steht?
Vielen Dank schon im Voraus
Ferenz