Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Frame
BildScreenshot zu Frame Frame-Seite mit Beispielarbeitsmappe aufrufen

Webabfrage mit Frames

Betrifft: Webabfrage mit Frames von: Michael H
Geschrieben am: 01.09.2014 13:43:14

Moin Allerseits!

Ich verzweifle hier gerade und hoffe, Ihr könnt mir weiterhelfen.

Ich möchte mich via VBA bei SV-Net Online anmelden. Ich habe dazu ein kleines Script, dass die Anmeldung erledigen soll. Dummerweise hat die Site noch Frames. Ich kann die Frames zählen und auch die Elemente.

Aber bei Zugirff auf den Frame kommt eine Fehlermeldung, die mir nicht erklären kann. Ich habe recherchiert und es sollte eigentlich funktionieren. Habt Ihr einen Tipp?

Private Sub ImportVO_Click()
    Dim objIEDoc As Object
    Dim objIE As Object
    Set objIE = CreateObject("InternetExplorer.Application")
    strURL = "https://www.gkvnet-ag.de/svnet-online/scripts/Anmeldung.asp?param=0000&login=1"
    With objIE
        .Visible = True
        .Navigate2 strURL
        Do While .ReadyState <> 4: DoEvents: Loop
        Do While .Busy = True: DoEvents: Loop
        
        'SIND FRAMES DA?
        FrameStr = .Document.frames.Length
        Länge = .Document.all.Length - 1
        For i = 1 To Länge
            Cells(i + 2, 3) = .Document.all(i).outerHTML
        Next i
        
        Länge = .Document.frames("svnetMainFrame").Document.all.Length - 1
                
        Do While .ReadyState <> 4: DoEvents: Loop
        Do While .Busy = True: DoEvents: Loop
        Set objIEDoc = .Document
    End With
    Do: Loop Until objIEDoc.ReadyState <> 4
    Set objIEDoc = Nothing
    Set objIE = Nothing
End Sub

Vielen Dank für Eure Hilfe.
Michael H

  

Betrifft: AW: Webabfrage mit Frames von: Martin
Geschrieben am: 01.09.2014 14:33:14

Hallo Michael,

probiere es mal so:

Private Sub ImportVO_Click()

    Dim objIEDoc As Object, objIE As Object
    Dim strURL As String
    
    Set objIE = CreateObject("InternetExplorer.Application")
    strURL = "https://www.gkvnet-ag.de/svnet-online/scripts/Anmeldung.asp?param=0000&login=1"
    
    With objIE
        .Visible = True
        .Navigate2 strURL
        Do While .readyState <> 4: DoEvents: Loop
        Do While .Busy = True: DoEvents: Loop
        
        With .document.frames(1).document
            'Betriebnr. eintragen
            .getElementsByName("txtbn")(0).Value = "Betriebsnr."
            
            'Benutzername eintragen
            .getElementsByName("txtuser")(0).Value = "Benutzername"
            
            'Kennwort eintragen
            .getElementsByName("txtpwd")(0).Value = "Passwort"
            
            'Formular abschicken
            '.Forms(0).submit
        End With
                        
    End With
    
    Set objIEDoc = Nothing
    Set objIE = Nothing
End Sub
Viele Grüße

Martin


  

Betrifft: AW: Webabfrage mit Frames von: Michael H
Geschrieben am: 01.09.2014 15:14:13

Hallo Martin!

Vielen Dank für den Tipp. Geht leider nicht. Bereits bei

With .Document.frames(1).Document

kommt die Fehlermeldung "Automatisierungsfehler"!

Hast Du noch eine Idee?

VG
Michael H


  

Betrifft: AW: Webabfrage mit Frames von: Martin
Geschrieben am: 01.09.2014 15:48:07

Hallo Michael,

okay, dann sprechen wir den Frame halt namentlich an. So sollte es hoffentlich klappen:

Private Sub ImportVO_Click()
 
     Dim objIEDoc As Object, objIE As Object
     Dim strURL As String
     
     Set objIE = CreateObject("InternetExplorer.Application")
     strURL = "https://www.gkvnet-ag.de/svnet-online/scripts/Anmeldung.asp?param=0000&login=1"
     
     With objIE
         .Visible = True
         .Navigate2 strURL
         Do While .readyState <> 4: DoEvents: Loop
         Do While .Busy = True: DoEvents: Loop
         
         With .document.frames("svnetMainFrame").document
             'Betriebnr. eintragen
             .getElementsByName("txtbn")(0).Value = "Betriebsnr."
             
             'Benutzername eintragen
             .getElementsByName("txtuser")(0).Value = "Benutzername"
             
             'Kennwort eintragen
             .getElementsByName("txtpwd")(0).Value = "Passwort"
             
             'Formular abschicken
             '.Forms(0).submit
         End With
                         
     End With
     
     Set objIEDoc = Nothing
     Set objIE = Nothing
 End Sub
Viele Grüße

Martin


  

Betrifft: AW: Webabfrage mit Frames von: Michael H
Geschrieben am: 01.09.2014 15:51:37

Hallo Martin!

Sorry, aber der gleiche Fehler an der gleichen Stelle.

VG
Michael H


  

Betrifft: AW: Webabfrage mit Frames von: Michael H
Geschrieben am: 01.09.2014 15:56:02

Beitrag noch offen.


  

Betrifft: AW: Webabfrage mit Frames von: Martin
Geschrieben am: 01.09.2014 16:02:06

Hallo Michael,

ich bin offen zu dir: Bei mir funktionieren beide Makros, allerdings habe ich es unter Excel 2003 und dem veralteten Internet Explorer 8 probiert. Ich habe jetzt alles dynamisch programmiert, bitte teste mal das folgende Makro:

Sub ImportVO_Click()
    Dim IEApp As Object, objForm As Object, objControl As Object
    Dim i As Integer
    Set IEApp = CreateObject("InternetExplorer.Application")
    
    IEApp.Visible = True
    IEApp.navigate "https://www.gkvnet-ag.de/svnet-online/scripts/Anmeldung.asp?param=0000& _
login=1"
    
    Do: Loop Until IEApp.Busy = False
    Do: Loop Until IEApp.Busy = False
    
    Do: Loop Until IEApp.document.readyState = "complete"
    
    For i = 0 To IEApp.document.frames.Length - 1
    
        For Each objForm In IEApp.document.frames(i).document.forms
            
            For Each objControl In objForm.elements
                With objControl
                    Select Case .Name
                        Case "txtbn"
                            .Value = "Betriebsnr."
                        Case "txtuser"
                            .Value = "Benutzername"
                        Case "txtpwd"
                            .Value = "Passwort"
                    End Select
                End With
            Next objControl
        Next objForm
    Next i
    
End Sub
Falls es jetzt noch immer nicht klappt, kann ich erst heute Abend unter Excel 2010 und einer aktuellen Internet Explorer-Version weiterprobieren.

Viele Grüße

Martin


  

Betrifft: AW: Webabfrage mit Frames von: Michael H
Geschrieben am: 01.09.2014 16:34:31

Hallo Martin!

Danke, jetzt kommen wir dem näher. Ich habe das mal an zwei anderen rechnern gestartet. Ein anderer W7 mit Office 2010 liefert das gleiche Ergebnis mit dem Automatisierungsfehler.
Der XP Rechner mit Office 2007 und IE8 läuft durch. Ich habe die Mappe von diesem Rechner dann auf den ersten kopiert und nochmal ausgeführt. Die meldung ist jetzt eindeutiger:

>Die Methode 'frames' für das Objekt 'JScriptTypeInfo' ist fehlgeschlagen<

Ich google mal.

VG
Michael H


  

Betrifft: AW: Webabfrage mit Frames von: Michael H
Geschrieben am: 01.09.2014 18:29:02

Ich habs!

Kein Frame mehr verwenden, sondern die Adresse des Frames unter IE11 direkt anwählen.

Private Sub ImportVO_Click()
    Dim objIEDoc As Object
    Dim objIE As Object
    Set objIE = CreateObject("InternetExplorer.Application")
    With objIE
        .Visible = True
        .Navigate2 "https://www.gkvnet-ag.de/svnet-online/scripts/AnmeldungMain.asp"
        Do While .readyState <> 4: DoEvents: Loop
        Do While .Busy = True: DoEvents: Loop
        
        With .Document
            'Betriebsnummer eintragen
            .getElementsByName("txtbn")(0).Value = "Betriebsnr."
            
            'Benutzername eintragen
            .getElementsByName("txtuser")(0).Value = "Benutzername"
            
            'Kennwort eintragen
            .getElementsByName("txtpwd")(0).Value = "Passwort"
            
            'Formular abschicken
            '.Forms(0).submit
        End With
                
        Do While .readyState <> 4: DoEvents: Loop
        Do While .Busy = True: DoEvents: Loop
        Set objIEDoc = .Document
    End With
    Do: Loop Until objIEDoc.readyState <> 4
    Set objIEDoc = Nothing
    Set objIE = Nothing
End Sub

Vielen Dank!
VG Michael H


  

Betrifft: AW: Webabfrage mit Frames von: Martin
Geschrieben am: 01.09.2014 20:47:56

Hallo Michael,

ich bin erst jetzt wieder zurück. Ich freue mich über Rückmeldungen immer sehr. Eigentlich hätte ich auch selbst auf die Idee kommen können die Seite ohne Frame aufzurufen. Ich werde jetzt trotzdem mal unter Windows 7 und Office 2010 testen, weil es auch mit Frame eine Lösung geben sollte.

Viele Grüße

Martin


  

Betrifft: ....und so werden Frames angesprochen von: Martin
Geschrieben am: 02.09.2014 01:47:17

Hallo Michael,

hier zwei Beispiele, wie Frames angesprochen werden. Erfolgreich getestet mit Internet Explorer 8 und 11:

1. Frame als Index

Private Sub ImportVO_Click()
        
    Dim objIEDoc As Object, objIE As Object
    Dim strURL As String
    
    Set objIE = CreateObject("InternetExplorer.Application")
    strURL = "https://www.gkvnet-ag.de/svnet-online/scripts/Anmeldung.asp?param=0000&login=1"
    
    With objIE
        .Visible = True
        .Navigate2 strURL
        Do While .readyState <> 4: DoEvents: Loop
        Do While .Busy = True: DoEvents: Loop
        
        With .Document.Frames.Item(1).Document
            'Betriebnr. eintragen
            .getElementsByName("txtbn")(0).Value = "Betriebsnr."
            
            'Benutzername eintragen
            .getElementsByName("txtuser")(0).Value = "Benutzername"
            
            'Kennwort eintragen
            .getElementsByName("txtpwd")(0).Value = "Passwort"
            
            'Formular abschicken
            '.Forms(0).submit
        End With
                        
    End With
    
    Set objIEDoc = Nothing
    Set objIE = Nothing
End Sub
2. Frame namentlich ansteuern
Private Sub ImportVO_Click2()
        
    Dim objIEDoc As Object, objIE As Object
    Dim strURL As String
    
    Set objIE = CreateObject("InternetExplorer.Application")
    strURL = "https://www.gkvnet-ag.de/svnet-online/scripts/Anmeldung.asp?param=0000&login=1"
    
    With objIE
        .Visible = True
        .Navigate2 strURL
        Do While .readyState <> 4: DoEvents: Loop
        Do While .Busy = True: DoEvents: Loop
        
        With .Document.Frames.Item("svnetMainFrame").Document
            'Betriebnr. eintragen
            .getElementsByName("txtbn")(0).Value = "Betriebsnr."
            
            'Benutzername eintragen
            .getElementsByName("txtuser")(0).Value = "Benutzername"
            
            'Kennwort eintragen
            .getElementsByName("txtpwd")(0).Value = "Passwort"
            
            'Formular abschicken
            '.Forms(0).submit
        End With
                        
    End With
    
    Set objIEDoc = Nothing
    Set objIE = Nothing
End Sub
Viele Grüße

Martin


  

Betrifft: AW: ....und so werden Frames angesprochen von: Michael H
Geschrieben am: 02.09.2014 09:11:06

Hallo Martin!

Vielen Dank! Ich habe auch noch recherchiert, aber die Nennung Item(1) ist nie da gewesen. Simpel, wenn man es weiß. Ich probiere mich dann mal weiter mit dem weiteren Aufruf und Ausfüllen des Formulars.

VG
Michael H


 

Beiträge aus den Excel-Beispielen zum Thema "Webabfrage mit Frames"