Anzeige
Archiv - Navigation
1308to1312
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
Button im Browser lässt sich nicht ausführen
27.04.2013 20:24:30
Fred
Hallo miteinander,
mit folgendem Code gebe ich Daten in einem Internet-Browser ein, aber der Button "Solve" (auf der ausgewiesenen WWW-Seite) wiedersetzt sich der Ausführung. Mehrere Work-Arounds sind schon gescheitert und so setze ich die Hoffnung auf Euch.
Das Sahnehäubchen wäre es, wenn ich den Satz, der nach dem Ausführen der Berechnung "Problem (L,W,l,w) = (...) with 9 boxes packed" (eigentlich ist nur die Anzahl der Boxes relevant) zurück in meine Excel-Datei in eine Zelle schreiben könnte.
Vielen Dank für etwaige Hilfe,
Fred
PS: Hier der Code
Sub loadit()
Dim IEApp As Object
Dim IEDocument As Object
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
IEApp.Navigate "http://lagrange.ime.usp.br/~lobato/packing/run/index.php"
With IEApp.Document
Do: Loop Until .ReadyState = "complete"
.getelementbyid("L").Value = 1000
.getelementbyid("W").Value = 666
.getelementbyid("l_").Value = 300
.getelementbyid("w_").Value = 202
Do: Loop Until .ReadyState = "complete"
' 

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

Betreff
Datum
Anwender
Anzeige
Button im Browser lässt sich ausführen
28.04.2013 07:09:43
Anton
Hallo Fred,
so?:
Code:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)      
Sub loadit()
 
  Dim IEApp As Object, all As Object  
  Set IEApp = CreateObject("InternetExplorer.Application")  
  IEApp.Visible = True
  IEApp.Navigate "http://lagrange.ime.usp.br/~lobato/packing/run/index.php"
 
  Do: Loop Until IEApp.Busy = False    
  Do: Loop Until IEApp.Busy = False    
  With IEApp.Document  
    Do: Loop Until .ReadyState = "complete"    
    .getelementbyid("L").Value = 1000
    .getelementbyid("W").Value = 666
    .getelementbyid("l_").Value = 300
    .getelementbyid("w_").Value = 202
    .getelementbyid("solve").onClick
    Sleep 2000
    Do: Loop Until .ReadyState = "complete"    
    For Each all In .all  
      If all.classname = "thumbcaption" Then MsgBox all.innertext  
    Next
  End With  
  IEApp.Quit
  Set IEApp = Nothing  
End Sub  


mfg Anton

Anzeige
AW: Button im Browser lässt sich ausführen
28.04.2013 07:42:01
Fred
Hallo Anton,
ja, in diese Richtung habe ich es auch probiert (allerdings ohne das "Sleep").
Das eigentliche Problem habe ich aber an der Zeile
.getelementbyid("solve").onClick
Hier meldet sich der Debugger mit:
"Laufzeitfehler '424'
Objekt erforderlich
Der Solve-Button auf der WWW-Seite hat wohl keine ID und ich weiß nicht, wie ich ihn auslösen kann.
Weiter Ideen zur Lösung?
Grüße,
Fred

AW: Button im Browser lässt sich ausführen
28.04.2013 08:02:46
Anton
Hallo Fred,
Weiter Ideen zur Lösung?
nein, habe ich nicht, bei mir funktioniert alles ohne Fehler.
mfg Anton

AW: Button im Browser lässt sich ausführen
28.04.2013 12:54:08
Fred
Hallo Anton,
danke für die Rückmeldung. Nun habe ich es auf einem alten Rechner versucht und ... dort läuft Dein Vorschlag.
Sehr suspekt... Sollte ich die Ursache finden, poste ich sie hier.
hast Du vielleicht noch einen Vorschlag wie ich
1. den Satz, der nach dem Ausführen der Berechnung "Problem (L,W,l,w) = (...) with 9 boxes packed" (eigentlich ist nur die Anzahl der Boxes relevant) zurück in meine Excel-Datei in eine Zelle schreiben könnte
2. das angezeigte Bild bei mir lokal speichern kann.
Danke für die Geduld,
Fred

Anzeige
AW: Button im Browser lässt sich ausführen
28.04.2013 13:41:07
Anton
Hallo Fred,
probier's hiermit:
Code:

Private Declare Sub Sleep Lib "kernel32" _  
  (ByVal dwMilliseconds As Long)  
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _    
  (ByVal pCaller As Long, _    
  ByVal szURL As String, _  
  ByVal szFileName As String, _  
  ByVal dwReserved As Long, _  
  ByVal lpfnCB As Long) As Long  
 
Public Function DownloadFile(URL As String, LocalFilename As String) As Boolean      
  Dim lngRetVal As Long  
  lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)  
  If lngRetVal = 0 Then DownloadFile = True    
End Function  
Sub loadit()
  Dim IEApp As Object, all As Object, img As Object, teil  
  Set IEApp = CreateObject("InternetExplorer.Application")  
  IEApp.Visible = True
  IEApp.Navigate "http://lagrange.ime.usp.br/~lobato/packing/run/index.php"
  Do: Loop Until IEApp.Busy = False    
  Do: Loop Until IEApp.Busy = False    
  With IEApp.Document  
    Do: Loop Until .ReadyState = "complete"    
    .getelementbyid("L").Value = 1000
    .getelementbyid("W").Value = 666
    .getelementbyid("l_").Value = 300
    .getelementbyid("w_").Value = 202
    .getelementbyid("solve").onClick
    Sleep 2000
    Do: Loop Until .ReadyState = "complete"    
    For Each all In .all  
      If all.classname = "thumbcaption" Then  
        For Each teil In Split(all.innertext, " ")  
          If IsNumeric(teil) Then Range("A1") = teil    
        Next
      End If  
    Next
    For Each img In .images  
      If InStr(1, img.src, "run/solutions/") > 0 Then  
        DownloadFile img.src, ThisWorkbook.Path & "\" & _
        Mid(img.src, InStrRev(img.src, "/") + 1)
      End If  
    Next
  End With  
  IEApp.Quit
  Set IEApp = Nothing  
End Sub  


mfg Anton

Anzeige
AW: Button im Browser lässt sich ausführen
28.04.2013 14:13:27
Fred
Hi Anton:
Klasse! Vielen Dank für die Hilfe und die Geschwindigkeit der Antworten!
Ich habe es auch noch auf einem dritten Rechner probiert, dort funktioniert es auch, aber erst nachdem ich die "Sleep"-zeit auf 10000 erhöht habe.
Danke nochmal,
Fred

Button im Browser lässt sich (nicht) ausführen
03.05.2013 13:43:51
Fred
Hallo Anton,
nun öffne ich diesen Thread nochmal, denn ich habe wieder das Problem (nun auf allen Rechnern) an der Zeile
.getelementbyid("solve").onClick
dass sich der Debugger mit "Laufzeitfehler 91; Objektvariable oder With-Blockvariable nicht festgelegt" meldet.
Tritt es nun vielleicht auch bei Dir/jemandem anders auf - woran könnte es liegen?
In der Hoffnung auf Lösungen ...
Fred

Anzeige
Button im Browser lässt sich ausführen
03.05.2013 15:51:22
Anton
Hallo Fred,
die Seite wurde geändert, deswegen so:
Code:

Private Declare Sub Sleep Lib "kernel32" _  
  (ByVal dwMilliseconds As Long)  
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _    
  (ByVal pCaller As Long, _    
  ByVal szURL As String, _  
  ByVal szFileName As String, _  
  ByVal dwReserved As Long, _  
  ByVal lpfnCB As Long) As Long  
 
Public Function DownloadFile(URL As String, LocalFilename As String) As Boolean      
  Dim lngRetVal As Long  
  lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)  
  If lngRetVal = 0 Then DownloadFile = True    
End Function  
Sub loadit()
  Dim IEApp As Object, all As Object, img As Object, objInput As Object, teil    
  Set IEApp = CreateObject("InternetExplorer.Application")  
  IEApp.Visible = True
  IEApp.Navigate "http://lagrange.ime.usp.br/~lobato/packing/run/index.php"
  Do: Loop Until IEApp.Busy = False    
  Do: Loop Until IEApp.Busy = False    
  With IEApp.Document  
    Do: Loop Until .ReadyState = "complete"    
    .getelementbyid("L").Value = 1000
    .getelementbyid("W").Value = 666
    .getelementbyid("l_").Value = 300
    .getelementbyid("w_").Value = 202
    For Each objInput In .getelementsbytagname("input")    
      If objInput.Type = "button" Then    
        If objInput.Value = "Solve" Then objInput.onClick    
      End If  
    Next
    Sleep 2000
    Do: Loop Until .ReadyState = "complete"    
    For Each all In .all  
      If all.classname = "thumbcaption" Then  
        For Each teil In Split(all.innertext, " ")  
          If IsNumeric(teil) Then Range("A1") = teil    
        Next
      End If  
    Next
    For Each img In .images  
      If InStr(1, img.src, "run/solutions/") > 0 Then  
        DownloadFile img.src, ThisWorkbook.Path & "\" & _
        Mid(img.src, InStrRev(img.src, "/") + 1)
      End If  
    Next
  End With  
  IEApp.Quit
  Set IEApp = Nothing  
End Sub  


mfg Anton

Anzeige
AW: Button im Browser lässt sich ausführen
03.05.2013 19:22:10
Fred
... unglaublich, dieser Anton ...
Klasse!
Hast Du vielleicht noch ein paar Tips für mich, den Einäugigen:
  • Was auf der WWW-Seite hatte sich geändert (denn denselben Effekt, den ich nun auch am zweiten Rechner hatte, hatte ich ja vorher schon am ersten)?

  • Was macht die Function "DownloadFile"?

  • wieso funktioniert es nur mit Sleep 2000 und nicht einer Schleife "Do: Loop Until .ReadyState = "complete""?

  • Dank & Grüße,
    Fred

    AW: Button im Browser lässt sich ausführen
    28.04.2013 13:21:51
    Fred
    Entschuldigung: die MessageBox habe ich übersehen, Frage 1) ist hinfällig! Sorry ...

    334 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige