2012-04-17 14 views
6

डेटाबेस डेटा का उपयोग कर फ़ॉर्म को पूरा करने के लिए इंटरनेट एक्सप्लोरर 9 को नियंत्रित करने के लिए माइक्रोसॉफ्ट एक्सेस 2003 से ऑटोमेशन का उपयोग करने की कोशिश कर रहा हूं।वीबीए इनपुट इवेंट्स के साथ इंटरनेट एक्सप्लोरर ऑटोमेशन

इनपुट ब्राउज़र में एक ईवेंट को सक्रिय करता है जो डेटा को मान्य करता है और सहेजने वाला बटन दृश्यमान बनाता है। अगर मैं प्रेषक का उपयोग करता हूं तो ईवेंट ट्रिगर होता है; हालांकि, मुझे प्रेषक बहुत अविश्वसनीय पाए गए हैं। यदि मैं तत्व के मान को बदलता हूं और फिर .fireevent ("बदले") का उपयोग करता हूं, कुछ भी नहीं होता - यहां तक ​​कि कोई त्रुटि भी नहीं।

मेरा सवाल है, मैं इस कार्यक्रम को कैसे फायर करूं। या, मैं कैसे पता लगा सकता हूं कि जावास्क्रिप्ट क्या चल रहा है। क्या आईई के लिए एक डीबग प्रकार का एडिन है जो मुझे बताएगा कि किस घटना को निकाल दिया गया है? यदि हां, तो क्या मैं सिर्फ स्क्रिप्ट चला सकता हूं?

मेरा कोड नीचे है।

Set IE = CreateObject("internetexplorer.application") 
IE.Visible = True 
IE.Navigate "https://extranet.website.com/Planning/Edition/Periodic?language=en" 

Do While IE.ReadyState <> 4 Or IE.Busy = True 
    DoEvents 
Loop 


'log in 
If IE.Document.Title = "website- access" Then 
    IE.Document.getElementById("login_uid").Value = "username" 
    IE.Document.getElementById("login_pwd").Value = "password" 
    IE.Document.all("ButSubmit").Click 
    Do While IE.ReadyState <> 4 Or IE.Busy = True 
     DoEvents 
    Loop 
End If 

Do While Not RstAvailability.EOF 
    StartDate = RstAvailability!AvailDate 
    IE.Document.getElementById("periodStart").Value = Format(StartDate, "dd mmm yy") 
    IE.Document.getElementById("periodEnd").Value = Format(StartDate, "dd mmm yy") 
    Set LinkCollection = IE.Document.GetElementsByTagName("A") 
    For Each link In LinkCollection 
     If link.innertext = "Add" Then 
      link.Click 
      Exit For 
     End If 
    Next 
    Do While IE.ReadyState <> 4 Or IE.Busy = True 
     DoEvents 
    Loop 


    Set objRows = IE.Document.GetElementsByTagName("tr") 
    If RstAvailability!RoomType = "DTW" Then 
     n = 0 
     While n < objRows.Length 
      If Trim(objRows(n).Cells(0).innertext) = "Single Room" Then 
       For i = 1 To 7 
        'objRows(n).FireEvent ("onchange") 
        'objRows(n).Cells(i).GetElementsByTagName("input")(0).Focus 
        'SendKeys Format(RstAvailability!roomcount - RstAvailability!RoomsSold, "0") & "{TAB}" 
        objRows(n).Cells(i).GetElementsByTagName("input")(0).Value = Format(RstAvailability!roomcount - RstAvailability!RoomsSold, "0") 
        objRows(n).Cells(i).GetElementsByTagName("input")(0).fireevent ("onchange") 
        Do While IE.ReadyState <> 4 Or IE.Busy = True 
         DoEvents 
        Loop 
       Next i 
      End If 
      n = n + 1 
     Wend 
    End If 

    Set objButtons = IE.Document.getelementsbyname("savePlanning") 
    objButtons(0).Click 

    Do While IE.ReadyState <> 4 Or IE.Busy = True 
     DoEvents 
    Loop 

    newtime = Now + TimeValue("0:00:10") 
    Do While True 
     If Now > newtime Then Exit Do 
    Loop 

    RstAvailability.MoveNext 
Loop 

इनपुट फ़ील्ड के HTML हैं:

<tr class="first" roomId="30494" articleId="0" type="Availability" readonly="False"> 

<div> 

    <span class="roomName"> 

    Single Room 

    </span> 



</div> 

<span class="data"> 

<input id="Availabilities" name="Availabilities" type="text" value="" /> 

</span> 

<span class="data"> 

<input id="Availabilities" name="Availabilities" type="text" value="" /> 

</span> 

धन्यवाद!

उत्तर

12

कुछ दिनों के लिए इस पर पसीने के बाद, उत्तर वास्तव में बहुत आसान था लेकिन वेब पर एमएसडीएन या कहीं और किसी भी दस्तावेज में खोजने के लिए लगभग असंभव था।

इनपुट फ़ील्ड के मान को बदलने से पहले, आप उस फ़ील्ड पर फ़ोकस सेट करने के लिए नेट करते हैं। मूल्य बदलने के बाद, आपको फोकस को दूसरे फ़ील्ड पर सेट करने की आवश्यकता है। जाहिर है, फोकस के नुकसान पर घटनाएं आग लगती हैं। इसलिए, कोड इस तरह दिखना चाहिए:

 n = 0 
    While n < objRows.Length 
     If Trim(objRows(n).Cells(0).innertext) = "Family Room" Then 
      For i = 1 To 7 
       objRows(n).Cells(i).GetElementsByTagName("input")(0).Focus 
       objRows(n).Cells(i).GetElementsByTagName("input")(0).Value = Format(RstAvailability!roomcount - RstAvailability!RoomsSold, "0") 
      Next i 
      objRows(n).Cells(1).GetElementsByTagName("input")(0).Focus 

     End If 
     n = n + 1 
    Wend 

तरह से मैंने पाया इस IE9 के लिए उपयोग के बारे में कुछ MSDN प्रलेखीकरण को देखकर किया गया था। यह अक्षम उपयोगकर्ताओं के लिए ध्यान केंद्रित करने पर सलाह दे रहा था। मैंने सोचा कि मैं इसे आज़मा दूंगा और यह काम करेगा। मैं उम्मीद करता हूं कि इससे किसी की मदद होगी।

डेव

+0

चीयर्स कि मेरे लिए मददगार था – BlueTrin

1

आप (IE9 में) चाहते हैं सही लाइन "अगले मैं" से पहले निम्न पंक्ति डाल करने के लिए। यदि आप फोकस नहीं हटाते हैं तो भी यह काम करना चाहिए?

objRows (एन) .Cells (i) .GetElementsByTagName ("इनपुट") (0) .Click