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

IE in neuem Tab und Felder füllen

IE in neuem Tab und Felder füllen
11.09.2014 07:38:00
Werner
Hallo zusammen!
Ich habe lange nach einer Lösung gesucht - leider aber nichts finden können.
Ich möchte, dass sich Hyperlinks in edinem neuen Tab öffnen und nicht in einer neuen IE-Instanz.
Dann möchte ich Daten aus Excel an bestimmte Felder in diesem neuen IE-Tab übergeben.
Hier mein Code, denn ich jetzt verwende:
Sub Atoss()
Dim objShell As Object, IEDoc As Object
Dim IEApp As Object, win As Object
Dim IEDocument As Object
Dim Adresse As String
Dim Benutzer As String
Dim Kennwort As String
Dim link As Object
Adresse = ActiveCell.Offset(0, 3)
Benutzer = ActiveCell.Offset(0, 7)
Kennwort = ActiveCell.Offset(0, 9)
Set objShell = CreateObject("Shell.Application")
For Each win In objShell.Windows
Next
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
IEApp.navigate Adresse
Do: Loop Until IEApp.Busy = False
Set IEDoc = IEApp.document
Do: Loop Until IEDoc.readyState = "complete"
Application.Wait TimeSerial(Hour(Now()), _
Minute(Now()), Second(Now()) + 2)
Set IEDocument = IEApp.document
IEDocument.getElementById("logonid").Value = Benutzer
IEDocument.getElementById("password").Value = Kennwort
Dim WshShell As Object
Set WshShell = CreateObject("WScript.Shell")
Application.Wait TimeSerial(Hour(Now()), _
Minute(Now()), Second(Now()) + 1)
WshShell.SendKeys "{TAB}"
WshShell.SendKeys "{ENTER}"
Do: Loop Until IEDoc.readyState = "complete"
Application.Wait TimeSerial(Hour(Now()), _
Minute(Now()), Second(Now()) + 1)
IEDocument.getElementById("zemsdabsemp-cnt").Click
Set IEApp = Nothing
Set objShell = Nothing
End Sub
Der Code öffnet aber den Internetexplorer neu und nicht die Seite in einem neuen Tab.
Ich habe dann versucht, es so zu lösen:
Sub Atoss_neu()
Dim objShell As Object, IEDoc As Object
Dim IEApp As Object, win As Object
Dim IEDocument As Object
Dim Adresse As String
Dim Benutzer As String
Dim Kennwort As String
Dim link As Object
Adresse = ActiveCell.Offset(0, 3)
Benutzer = ActiveCell.Offset(0, 7)
Kennwort = ActiveCell.Offset(0, 9)
Set objShell = CreateObject("Shell.Application")
For Each win In objShell.Windows
If InStr(1, UCase(win.FullName), "IEXPLORE") > 0 Then
Set IEApp = win
IEApp.Navigate2 Adresse, 2048
Exit For
End If
Next
If IEApp Is Nothing Then
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
IEApp.navigate Adresse
End If
Application.Wait TimeSerial(Hour(Now()), _
Minute(Now()), Second(Now()) + 2)
Set IEDocument = IEApp.document
IEDocument.getElementById("logonid").Value = Benutzer
IEDocument.getElementById("password").Value = Kennwort
Dim WshShell As Object
Set WshShell = CreateObject("WScript.Shell")
Application.Wait TimeSerial(Hour(Now()), _
Minute(Now()), Second(Now()) + 1)
WshShell.SendKeys "{TAB}"
WshShell.SendKeys "{ENTER}"
Do: Loop Until IEDoc.readyState = "complete"
Application.Wait TimeSerial(Hour(Now()), _
Minute(Now()), Second(Now()) + 1)
IEDocument.getElementById("zemsdabsemp-cnt").Click
Set IEApp = Nothing
Set objShell = Nothin
End Sub
Damit öffnet er zwar die Url in einem neuen Tab, jedoch kommt in der Zeile
IEDocument.getElementById("logonid").Value = Benutzer
die Meldung "Laufzeitfehler 91 - Objektvariable oder With-Blockvariable nicht festgelegt".
Kann mir evtl. jemand helfen?
Gruß und Danke!
Werner

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: IE in neuem Tab und Felder füllen
11.09.2014 11:50:16
Martin
Hallo Werner,
dein Code kann nicht gehen, da du der Objekt-Variable IEApp den neuen Tab zuweisen musst. Folgenden Abschnitt musst du ersetzen:
ALT:
    Set objShell = CreateObject("Shell.Application")
For Each win In objShell.Windows
If InStr(1, UCase(win.FullName), "IEXPLORE") > 0 Then
Set IEApp = win
IEApp.Navigate2 Adresse, 2048
Exit For
End If
Next
NEU:
    Set objShell = CreateObject("Shell.Application")
For Each win In objShell.Windows
If InStr(1, UCase(win.FullName), "IEXPLORE") > 0 Then
Set IEApp = win
IEApp.Navigate2 Adresse, 2048
Application.Wait Now + TimeSerial(0, 0, 1)
With objShell.Windows
Set IEApp = .Item(.Count - 1)
End With
Do While IEApp.Busy = 4
DoEvents
Loop
Exit For
End If
Next
Viele Grüße
Martin

Anzeige
AW: IE in neuem Tab und Felder füllen
11.09.2014 12:43:58
Werner
Hallo Martin!
Danke für die Hilfe!
Das klappt soweit.
Wie so oft kommt ein "aber":
Bei dieser Zeile kommt auch wieder der Laufzeitfehler 91:
IEDocument.getElementById("zemsdabsemp-cnt").Click
Kannst du mir noch mal helfen?
Gruß
Werner

AW: IE in neuem Tab und Felder füllen
11.09.2014 17:42:24
Martin
Hallo Werner,
da du in deinem Code die Website nicht angegeben hast, kann ich es leider nicht testen. Ich habe den Code mit einer anderen Website getestet (wo die HTML-Felder auch andere Namen haben) und da klappt die Click-Anweisung problemlos. Daher ist meine erste Vermutung, dass du den Namen des Submit-Buttons falsch angegeben hast.
Alternativ kann ich dir jetzt nur anbieten das Formular direkt abzuschicken:
ALT:
IEDocument.getElementById("Submit").Click

NEU:
IEDocument.forms(0).submit
Das klappt aber nur, wenn die Bezeichnung "submit" in keinem Namen der HTML-Form auftritt! Wenn auch das nicht hilft, musst du mir zum Testen wenigstens die Website mitteilen.
Viele Grüße
Martin

Anzeige
AW: IE in neuem Tab und Felder füllen
11.09.2014 19:09:02
Martin
Hallo Werner,
kleine Korrektur, selbstverständlich ist folgende Zeile zu ersetzen:
ALT:
IEDocument.getElementById("zemsdabsemp-cnt").Click

NEU:
IEDocument.forms(0).submit

Kontrolliere aber trotzdem mal, ob der Submit-Button tatsächlich die ID-Bezeichnung "zemsdabsemp-cnt" hat, denn vielleicht ist das der Name des Buttons. Einen Namen kannst du mit getElementsByName ansprechen. Dann sollte die Anweisung wie folgt lauten:
IEDocument.getElementsByName("zemsdabsemp-cnt")(0).Click
Viele Grüße
Martin

Anzeige
AW: IE in neuem Tab und Felder füllen
12.09.2014 00:19:51
Martin
Hallo Werner,
mir ist noch ein recht sicherer Lösungsweg zum Absenden des Formulars eingefallen: In einer For Each-Schleife wird der Submit-Button einfach ermittelt. Bei der Gelegenheit habe ich noch einige kleine Optimierungen des Makros vorgenommen, deshalb hier der gesamte Code:
Sub Atoss_neu()
Dim objShell As Object
Dim IEApp As Object, win As Object
Dim IEDocument As Object
Dim Adresse As String
Dim Benutzer As String
Dim Kennwort As String
Dim iCount As Integer
Dim objCtrl As Object
Adresse = ActiveCell.Offset(0, 3)
Benutzer = ActiveCell.Offset(0, 7)
Kennwort = ActiveCell.Offset(0, 9)
Set objShell = CreateObject("Shell.Application")
For Each win In objShell.Windows
If InStr(1, UCase(win.FullName), "IEXPLORE") > 0 Then
Set IEApp = win
With objShell.Windows
iCount = .Count
IEApp.Navigate2 Adresse, 2048
Do Until .Count > iCount
DoEvents
Loop
Set IEApp = .Item(.Count - 1)
End With
Exit For
End If
Next
'Falls kein IE-Explorer gefunden
If IEApp Is Nothing Then
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
IEApp.navigate Adresse
End If
'Warten bis Seite geladen
Do While IEApp.Busy Or IEApp.readyState  4
DoEvents
Loop
'Felder ausfüllen
Set IEDocument = IEApp.document
IEApp.document.getElementById("logonid").Value = Benutzer
IEApp.document.getElementById("password").Value = Kennwort
Dim WshShell As Object
Set WshShell = CreateObject("WScript.Shell")
Application.Wait DateAdd("s", 1, Now)
WshShell.SendKeys "{TAB}"
WshShell.SendKeys "{ENTER}"
Do: Loop Until IEApp.readyState = "complete"
Application.Wait DateAdd("s", 1, Now)
'Formular abschicken
For Each objCtrl In IEApp.document.forms(0).Elements
If objCtrl.Type = "submit" Then
objCtrl.Click
Exit For
End If
Next
Set IEApp = Nothing
Set objShell = Nothing
End Sub
Der Abschnitt mit dem WshShell-Objekt erscheint mir eher suboptimal. Ich bin allgemein kein Freund von der SendKeys-Methode. Da ich aber nicht weiß was du damit genau bezweckst, kann ich den Code an dieser Stelle nicht optimieren. Jetzt sollte - hoffentlich - alles klappen.
Viele Grüße
Martin

Anzeige
AW: IE in neuem Tab und Felder füllen
12.09.2014 07:58:55
Werner
Guten Morgen Martin
Erstmal Danke für deine Hilfe!
Die Internetseite ist unsere Gleitzeit-Buchung.
Einen Link kann ich dir also nicht schicken.
Aber bei dieser Seite kannst du es ja mal prüfen?
www.meine-fahrgemeinschaft.de
Bei der anderen Anmeldung (Atoss-Makro) habe ich mal den html-Code kopiert.
Hilft das?
Der Anmelde-Knopf wird nämlich mit deinem Code leider nicht "gedrückt".
td class="z-button-cm"
Text - Anmelden
Mehr steht da leider nicht.
Gruß und Danke!
Werner

AW: IE in neuem Tab und Felder füllen
12.09.2014 08:27:10
Martin
Hallo Werner,
leider habe ich heute kaum Zeit. Jetzt auf die Schnelle ein Versuch:
IEApp.document.getelementsbyclassname("z-button-cm")(0).Click
Viele Grüße
Martin

Anzeige
...habe vergessen zu schreiben, dass...
12.09.2014 08:31:57
Martin
Hallo Werner,
getelementsbyclassname wird erst ab dem Internet Explorer 9 unterstützt!
Viele Grüße
Martin

AW: ...habe vergessen zu schreiben, dass...
12.09.2014 08:33:18
Werner
IE9 habe ich.
Ich werde es testen.
Kann mich aber erst nächste Woche wieder melden.
Danke und schönes Wochenende!
Werner

AW: IE in neuem Tab und Felder füllen
12.09.2014 08:02:53
Werner
Vielleicht ist das hier auch hilfreich...
Auch dieser Link wird in einem neuen Fenster geöffnet anstatt in einem neuen Tab.
Sonst klappt das Teil ganz gut.
Sendkeys würede ich gerne weglassen. Aber dafür reicht mein Wissen nicht aus.
Sub GMX()
Dim objShell As Object, IEDoc As Object
Dim IEApp As Object, win As Object
Dim IEDocument As Object
Dim Adresse As String
Dim Benutzer As String
Dim Kennwort As String
Dim link As Object
Adresse = ActiveCell.Offset(0, 3)
Benutzer = ActiveCell.Offset(0, 7)
Kennwort = ActiveCell.Offset(0, 9)
Set objShell = CreateObject("Shell.Application")
For Each win In objShell.Windows
Next
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
IEApp.navigate Adresse
Do: Loop Until IEApp.Busy = False
Set IEDoc = IEApp.document
Do: Loop Until IEDoc.readyState = "complete"
Set IEDocument = IEApp.document
IEDocument.getElementById("inpLoginFreemailUsername").Value = Benutzer
IEDocument.getElementById("inpLoginFreemailPassword").Value = Kennwort
Application.Wait TimeSerial(Hour(Now()), _
Minute(Now()), Second(Now()) + 1)
IEDocument.getElementById("inpLoginFreemailPassword").Focus
IEDocument.getElementById("inpLoginFreemailPassword").Select
Dim WshShell As Object
Set WshShell = CreateObject("WScript.Shell")
Application.Wait TimeSerial(Hour(Now()), _
Minute(Now()), Second(Now()) + 1)
WshShell.SendKeys "{enter}"
Do: Loop Until IEDoc.readyState = "complete"
Set IEApp = Nothing
Set objShell = Nothing
End Sub
Gruß
Werner
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige