Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
388to392
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
388to392
388to392
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Event bzgl. Microsoft Internet Controls auslösen

Event bzgl. Microsoft Internet Controls auslösen
24.02.2004 17:09:52
Philipp
Hi, ich bin grade dabei ein nettes Script zur Automation von diversen Reportings zu schreiben. Diesbezüglich importiere ich Informationen aus einer Website nach Excel.
Aktuell habe ich das Problem, dass ich wissen muss, wann die Seite, die ich mit Microsoft Internet Controls lade, fertig geladen ist.
Dazu gibt es in der Microsoft Internet Controls Bibliothek das Event NavigateComplete2.
Leider wird es - trotz laut MSDN richtiger Verwendung - nicht ausgelöst.
Vielleicht kann mir jemand sagen, wo es genau stehen muss bzw. ob ich nicht doch was falsch gemacht habe.
Hier der Code aus Modul1 (Das bisher einzige Modul)
Option Explicit
Rem globale Variablen
Public objIE As InternetExplorer
Rem globale Konstanten
Public Const strPortalURL As String = "##"
Public Const strPortalLogin As String = "##"
Public Const strPortalPassword As String = "##"


Private Sub objIE_NavigateComplete2(ByVal pDisp As Object, ByVal URL As Variant)
MsgBox URL, vbOKOnly
End Sub

Sub IEstart()
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
End Sub

Sub IEterminate()
If Not objIE Is Nothing Then
objIE.Quit
Set objIE = Nothing
End If
End Sub


Sub GoPortal()
objIE.Navigate strPortalURL
End Sub


Sub PortalLogin()
objIE.Document.all.Login.Value = strPortalLogin
objIE.Document.all.password.Value = strPortalPassword
objIE.Document.all.Submit.Click
End Sub


Sub Ablauftest()
Call IEstart
Call GoPortal
'Call PortalLogin
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Event bzgl. Microsoft Internet Controls auslös
24.02.2004 17:21:07
Jens
Hi
Ich nurtze zur Abfrage ob der IE fertig ist...
Do: Loop Until objIE.Busy = False
Do: Loop Until objIE.Busy = False
2mal wegen Werbung oder weiterleitungen oder ähnlichen.
Gruß Jens
AW: Event bzgl. Microsoft Internet Controls auslös
24.02.2004 17:30:01
Alex K.
Hallo Jens,
um Ereignisse in VBA abzufangen, musst du ein Klassenmodul anlegen und dort dein Code einfügen.
Die Definiton eines Objektes mit Ereignissen heißt dann:

Private WithEvents objIE As InternetExplorer

Im Klassenmodul hast du dann in der linken Combobox ein Eintrag "objIE". Diesen auswählen und dann hast du Zugriff auf die Ereignisse.
Falls du Probleme mit dem Handling der Klasse hast, melde dich noch einmal.
Anzeige
Sorry, meinte mit Posting Phillip, nicht Jens :-)
24.02.2004 17:30:53
Alex K.
AW: Sorry, meinte mit Posting Phillip, nicht Jens
24.02.2004 17:37:16
Jens
Hi
Hab eigendlich noch nie so ein Klassenmodul gebraucht.
objIE.Busy sollte es in seinen Fall aber auch tun.
Dies liefert solange True, wie der Browser mit laden der Seite beschäftigt ist.
Gruß Jens
Jetzt sehe ich seinen kleinen Fehler
24.02.2004 17:41:10
Jens
CreateObject("InternetExplorer.Application")
VS
Steuerelement "Webbrowser"
Im Steurelement gibt es das Event "NavigateComplete2" für das Objekt nicht.
Gruß Jens
Trotzdem Klassenmodul
24.02.2004 17:52:07
Alex K.
Hallo Jens,
wie auch immer, aber für das ABfangen von Ereignissen benötigt man IMMER ein Klassenmodule und die Deklaration
Private WithEvents Obj as ObjektTyp
Kling komisch, ist aber so :-)
Anzeige
Warum? Trotzdem Klassenmodul
24.02.2004 18:37:20
Jens
Warum immer?
Mein Programm läuft auch ohne ein KlassenModul.
Wüste nicht zu was ich das brauche.

Sub Copy_html_Code(Web_Adress as String)
Dim appIE As Object
Dim sTxt As String
Set appIE = CreateObject("InternetExplorer.Application")
appIE.Visible = True
appIE.navigate Web_Adress
Do: Loop Until appIE.Busy = False 'Abfragen ob der IE noch was zu tun hat
Do: Loop Until appIE.Busy = False 'Sicherheitshalber noch mal
appIE.Refresh
Do: Loop Until appIE.Busy = False
Do: Loop Until appIE.Busy = False
sTxt = appIE.Document.documentElement.outerHTML
appIE.Quit
Set appIE = Nothing
... weitert Code ...
End Sub

Anzeige
AW: Warum? Trotzdem Klassenmodul
24.02.2004 18:45:37
Alex K.
Hallo Jens,
ich habe NIE behauptet, dass dein Programm nicht läuft bzw. das die Schleife mit .Busy nicht funktioniert. Wenn du genau liest, schriebe ich, dass für das Abfange von Ereignissen ein Klassenmodul benötigt wird.
Weisst du, was ein Ereignis im Gegensatz zu einer Eigenschaft ist?
Ein Ereignis wird vom dem Objekt ausgelöst, hier IE Objekt, und kann durch eine Prozedur abgefangen werden. Hierzu sind die im vorigen Posting genannten Bedingungen notwendig.
Eine Eigenschaft hingegen löst kein Ereignis aus. D.h. du weist nicht, zu welchem Zeitpunkt das Objekt die Eigenschaft setzt. Ergo musst du eine Schleife konstruieren, welche damit das gesamte Makro an dieser Stelle "anhält", bis die Eigenschaft eingetreten ist.
Phillip hatte nach dem Ereignis gefragt und ich hatte ihm daraufhin einen Lösungsvorschlag mit Ereignissen gemacht. Dies ist unabhängig von deinen Lösungsvorschlag zu sehen.
Also hiermit beende ich die Diskussion. Ich kann nichts dafür, dass du mit Ereignissen nichts anfangen kannst.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige