2017-07-27 3 views
4

Okay,HTML-Datumsauswahl ohne Eingabefeld. verwenden VBA-Update Ereignis

Ein einfaches Problem mit einer schwierigen Lösung (derzeit)

Es gibt eine Seite mit einem zu und von Datumsauswahl abzufeuern. Die Datumsauswahl hat kein HTML-Eingabeelement, aber ich kann mit InnerText darauf zugreifen. Es gibt kein Problem mit Innertext unter Verwendung die vom und zum Datum in

Das Problem als solches stellt sich zu setzen:

Wenn Termine sind manuell eingegeben, eine „Form“ angezeigt wird, dass Updates live, wenn der Benutzer die Daten auswählt und nur die Daten in diesem Zeitraum anzeigt. Wenn diese programmatisch dort geschehen ist, ist keine Live-Aktualisierung der "Form"

Versuch so weit:

Set document = objIE.document 

With document 
    .getElementsByClassName("controls").Item(0).Focus 
    .getElementsByClassName("select-daterange").Item(0).Focus 
    .getElementsByClassName("select-datepicker from").Item(0).Focus 
    .getElementsByClassName("date-label").Item(0).innerText = "June 1, 2017" 
    .getElementsByClassName("date-label").Item(1).innerText = "June 5, 2017" 
End With 

aus der Community jede Führung schätzen! Hier

ist ein Beispiel, was die Datumsauswahl wie folgt aussieht:

No-input Date Picker

+0

IE11. sollte ich firefox versuchen? – user1

+0

Wenn Sie die URL nicht teilen können, welche "Datumsauswahl" wird auf der Seite verwendet? Könntest du hier genauer sein? – dee

+0

http://alloyui.com/examples/datepicker/ gefällt das. kein Eingabefeld, nur Auswahl eines Datums – user1

Antwort

1

ich bewiesen hatte es möglich ist, manuell ein Javascript-Ereignis von VBA Feuer mit fireevent.

Einige Links

Mozilla Dev Network - EventTarget.fireEvent

ist hier mein Code.

Option Explicit 

Sub Test() 
    '* Tools->References->Microsoft HTML Object Library 
    '* Tools->References->Microsoft Internet Controls 

    Dim ie As SHDocVw.InternetExplorerMedium 
    Set ie = New SHDocVw.InternetExplorerMedium 


    ie.Visible = True 
    ie.navigate "n:\TestWebOnChangeManually.html" 

    Dim obj As Object 

    Stop '* i use this pause to dismiss Allow Block Content footer warning message 
    Dim dom As MSHTML.HTMLDocument 
    Set dom = ie.document 

    Dim textSource As MSHTML.HTMLInputElement 
    Set textSource = dom.getElementById("source") 

    textSource.innerText = "poked" 

    'https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/fireEvent 
    '* not sure what to place in second parameter 
    textSource.FireEvent "onchange", Nothing 


End Sub 

und mit dieser HTML-Testdatei

<html> 
<head/> 

<body> 

<input id="source" type="text" onChange="MyChange('source')"></input> 

<input id="someOtherControlToFocusSwitchTo" type="text" value="foo"></input> 


<script> 
    function MyChange(eleId) 
    { 
     if (eleId) 
     { 
      var ele = document.getElementById(eleId); 
      if (ele) { 
       alert(ele.value); 
      } 
     } else 
     { 
      alert("MyChange fired with no param"); 
     } 

    } 

</script> 
</body> 
</html> 

In anderen Ländern scheint es ein anderer Ansatz dispatchEvent von SO FireEvent and IE11 kopierten einig Codes zu sein, obwohl ich das nicht versucht. Dies ist VBA-Code auf einige Javascript in SO How can I trigger an onchange event manually? gefunden basiert, die selbst ein Duplikat SO How to trigger event in JavaScript?

' Fire the onChange event... 
Dim objEvent 
Set objEvent = doc.createEvent("HTMLEvents") 
objEvent.initEvent "change", False, True 
e.dispatchEvent objEvent 

Ich hoffe, dass Sie genug ist, kann dieses Zeug Debuggen schwierig sein.

+0

VBA ist für Excel VBScript ist für Browser es scheint, Sie haben eine Antwort erstellt, die nicht, wie ich die Frage interpretierte, aber ich glaube, es ist die einzige gültige Möglichkeit, es zu interpretieren. – William

+0

@William, yeah Ich habe Tags bearbeitet. –

+0

Es gibt kein onchange Element/Event im HTML/Js – user1

Verwandte Themen