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

VBA IE steuern ohne genaue ID

VBA IE steuern ohne genaue ID
30.10.2019 14:05:58
Domi
Hallo Zusammen,
ich fange gerade an in VBA den Internet Explorer ein wenig zu steuern damit zukünftig unnötige Copy-Paste Tätigkeiten entfallen.
Ich habe es bereits geschafft Textfelder mit IDs auszulesen und den Wert in eine Zelle zu schreiben.
Jetzt kommt aber mein Problem ins Spiel. Die nächsten benötigten Daten befindet sich in einem anderen Reiter in der Webanwendung. Dazu müsste das Tool einfach den entsprechenden Menüpunkt anklicken. Der Menüpunkt hat leider keine ID.
Ich habe es versucht mit ClassName und innerhtml zu steuern komme aber noch nicht so auf den nenner. Hat jemand eine IDEE
  Set objShell = CreateObject("Shell.Application")
For Each objWnd In objShell.Windows
If "Internet Explorer" = objWnd.Name Then
Set objDoc = objWnd.Document
If objDoc.Title Like "Kopf *" Then
For xTemp = 2 To 4 'wks.Cells(1, 1).End(xlDown).Row
wks.Cells(xTemp, 4).Value = objDoc.getElementById(wks.Cells(xTemp, 3)).Value
Next
'Set VarClass = objDoc.getElementsByClassName("listelment")
For Each VarClass In objDoc.getElementsByClassName("listelment")
If VarClass.innerhtml = "Montageort" Then
VarClass.Click
End If
Next VarClass
End If
End If
Next objWnd

Hat jemand eine Idee wie ich mein Problem lösen kann?
Grüße

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Warum IE?
30.10.2019 14:49:03
Fennek
Hallo,
ist es möglich die URL zu nennen und die gewünschten Daten?
mfg
AW: Warum IE?
30.10.2019 15:41:19
Domi
VBA bietet doch nur die Möglichkeit IE zu steuern oder?
Url kann ich leider nicht nennen, da es Firmenintern ist.
AW: XML2.HTTP
30.10.2019 16:02:58
Fennek
Hallo,
der IE ist bekanntlich ein sehr großes Programm, die Abfrage läuft ruhiger mit CreateObject("XLM2.HttpRequest")
Die Abfrage-Befehl wie "GetbyclassName" etc sind identisch.
Aber ohne eine Möglichkeit einen Code selbst zu testen, will ich mich nicht dazu äußern.
mfg
AW: VBA IE steuern ohne genaue ID
30.10.2019 15:56:45
volti
Dazu müsste das Tool einfach den entsprechenden Menüpunkt anklicken
Hallo Domi,
falls es keine anderweitige Idee geben sollte, Deine IE-Anwendung sichtbar im Vordergrund liegt und die Tabs an fester Position liegen sollten (u.U. Window maximized), gibt es noch die Möglichkeit, per VBA dort einen Mausklick abzusetzen.
Hier mal ein Beispiel für einen Linksklick mit der Maus:
Private Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare PtrSafe Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Type POINTAPI
     x As Long
     y As Long
End Type
Private Declare PtrSafe Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As LongPtr)
Private Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_LEFTUP = &H4
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub MausKlick()
'Linke Maustaste an x,Y-Position klicken und 100ms warten
  Dim mCX As Long, mCY As Long
  mCX = 720: mCY = 58               'Position => anpassen
  SetCursorPos mCX, mCY
  mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
  Sleep 100                         'Zur Sicherheit etwas warten
End Sub
Sub CheckPos()
'Mausposition ermitteln, Maus auf gewünschten Punkt setzen und Makro starten z.B. F8
 Dim Pos As POINTAPI
 GetCursorPos Pos
 MsgBox "x:=" & Pos.x & ", y:=  " & Pos.y
End Sub

Die zweite Sub ist nur zur Ermittlung der Position, falls nötig.
PS: Ist die Anwendung nicht im Vollbild und oder verschoben, müssten vorher die Koordinten des Fensters ermittelt und dazuaddiert werden.
viele Grüße
Karl-Heinz
Anzeige
AW: Lösung gefunden
30.10.2019 17:27:55
Dominik
ich habe die Lösung gefunden, eigentlich hätte es mir klar sein müssen :D
Set objShell = CreateObject("Shell.Application")
For Each objWnd In objShell.Windows
If "Internet Explorer" = objWnd.Name Then
Set objDoc = objWnd.Document
If objDoc.Title Like "Kopf*" Then
For xTemp = 2 To 4 'wks.Cells(1, 1).End(xlDown).Row
wks.Cells(xTemp, 4).Value = objDoc.getElementById(wks.Cells(xTemp, 3)).Value
Next
xTemp = 0
'Set VarClass = objDoc.getElementsByClassName("listelment")
For Each VarClass In objDoc.getElementsByClassName("listelment")
xTemp = xTemp + 1
If VarClass.innerhtml = "Montageort" Then
objDoc.getElementsByClassName("listelment")(xTemp - 1).Click
Exit For
End If
Next VarClass
'Montageort koprieren
For xTemp = 5 To 16 'wks.Cells(1, 1).End(xlDown).Row
wks.Cells(xTemp, 4).Value = objDoc.getElementById(wks.Cells(xTemp, 3)).Value
Next
End If
End If
Next objWnd

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige