2014-12-15 9 views
5

मैंने अपनी समस्या के इतने सारे जवाब पढ़े लेकिन किसी भी तरह से अगर मैं जो देखता हूं उसे "नकल" करने का प्रयास करता हूं, तो भी मैं जो भी चाहता हूं वह करने में सक्षम नहीं हूं।इंटरनेट एक्सप्लोरर इनपुटबॉक्स भरना

समस्या बहुत सरल है: खुले आईई पृष्ठ पर एक इनपुटबॉक्स भरें।

परिणाम: कोड getelementbyid के साथ लाइन पर फंस गया है रनटाइम त्रुटि 424 (ऑब्जेक्ट आवश्यक) दिखा रहा है।

Private Sub AddInfoFromIntranet() 

Dim ie As Object 

Set ie = CreateObject("internetexplorer.application") 
Application.SendKeys "{ESC}" ' I need this to ignore a prompt 

With ie 
    .Visible = True 
    .navigate "{here goes the address of my website}" 
    Do Until Not .Busy And .readyState = 4 
     DoEvents 
    Loop 
    .document.getelementbyid("Nachnamevalue").Value = "{here goes whar I want to insert}" 
End With 

Set ie = Nothing 

End Sub 

इंटरनेट एक्सप्लोरर पुस्तकालयों स्वाभाविक रूप से आयात किया गया (अन्यथा "internetexplorer.application" काम नहीं होगा।

मैं सकारात्मक है कि क्षेत्र मैं भरना चाहते हैं "Nachnamevalue" कहा जाता है कि मैं क्या सीखा से के रूप में कर रहा हूँ । आज सुबह इंटरनेट के चारों ओर एक नज़र डालने का

मेरे वेबपेज के HTML कोड (केवल दिलचस्प टुकड़ा) इस तरह दिखता है:

<!DOCTYPE html> 
<html> 
<head> 
<title></title> 
<style> 
    '{here there are info on the style, which i'm gonna ignore} 
</style> 
</head> 
<body bgcolor="#ffffcc"><table width="1000"><tbody><tr><td> 
    <form name="Suchform" action="index.cfm" method="get" target="bottom_window"> 
    Nachname: 
     <select name="Nachnamepulldown" class="font09px" onchange="wait_and_search()"> 
      <option value="BEGINS_WITH">beginnt mit 
      <option value="EQUAL">ist 
      <option value="CONTAINS">enthält 
     </option></select> 
     <input name="Nachnamevalue" onkeyup="wait_and_search()" type="text" size="8">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

    Abteilung: 
     <select name="Abteilungpulldown" class="font09px" onchange="wait_and_search()"> 
      <option value="BEGINS_WITH">beginnt mit 
     <option value="EQUAL">ist 
     <option value="CONTAINS">enthält 
     </option></select> 
     <input name="Abteilungvalue" onkeyup="wait_and_search()" type="text" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

     <input name="fuseaction" type="hidden" value="StdSearchResult"> 
     <input type="submit" value="suchen"> 
     <script language="JavaScript" type="text/JavaScript"> 
     document.Suchform.Nachnamevalue.focus(); 
     </script> 
    </form> 
</td></tr></tbody></table></body> 
</html> 

एक "एम्बेडेड" जावास्क्रिप्ट भी है (मुझे नहीं पता कि यह मदद कर सकता है) जो "Nachnamevalue" इनपुटबॉक्स में कम से कम 2 वर्णों को हर बार खोज के परिणाम लाता है।

मैं क्या गलत कर रहा हूं?

संपादित करें: जब मैं कदम-दर-कदम उप निष्पादित करने के लिए प्रयास करते हैं, मैं निम्नलिखित:

Set Doc = ie.document

? डॉक्टर [वस्तु HTMLDocument]

+0

आप इस बदलना चाहिए:। .document.getelementbyid '(" Nachnamevalue ") मूल्य =" {यहाँ मैं चाहता हूं कि मैं इस '.document.getElementsByName ("Nachnamevalue") के साथ "" डालना चाहता हूं। "वैल्यू =" {यहां जो भी मैं डालना चाहता हूं} "। यहां तक ​​कि अगर मुझे लगता है कि, यदि आपने पहले से ही एलेक्स के जवाब को सफलतापूर्वक परीक्षण नहीं किया है, तो समस्या यह है कि जब आप ऑब्जेक्ट को इंगित करते हैं तो पृष्ठ पूरी तरह से लोड नहीं होता है। 'Application.Wait' विधि के साथ प्रतीक्षा 5 सेकंड को मजबूर करने का प्रयास करें और देखें कि यह काम करता है या नहीं। –

+0

मैंने 'application.Wait (अब + टाइमवैल्यू (" 0:00:05 ")) के साथ प्रयास किया ...' – Noldor130884

+0

काम नहीं करता है, क्या आप पहले 'एप्लिकेशन लिखने का प्रयास कर सकते हैं। टाइम टाइम (घंटा (अब)), मिनट (अब()), दूसरा (अब()) + 5)' और फिर 'MsgBox .document.getElementsByName ("Nachnamevalue") 'अपवाद को बढ़ाने वाली रेखा से ठीक पहले, और हमें बताएं कि आप क्या देखते हैं? –

उत्तर

7

GetElementById अपने id विशेषता के आधार पर एक तत्व हो जाता है (ध्यानसूची में इसके भीतर की चर के बिना एक वस्तु है), लेकिन "Nachnamevalue"name विशेषता के मान है।

.document.Forms("Suchform").Elements("Nachnamevalue").value = "xxx" 
+1

कोशिश की यह भी ... हमेशा एक ही त्रुटि दिखाती है :(क्या यह संभव है कि मैंने कुछ पुस्तकालयों को लोड नहीं किया? मेरे पास "एचटीएमएल ऑब्जेक्ट लाइब्रेरी" लोड है और मैंने जो कुछ भी पा सकता था उसे लोड करने का प्रयास किया, लेकिन कुछ भी नहीं ... फिर भी उस लाइन पर फंस गया ... – Noldor130884

1

यह मेरे लिए काम किया:

नाम का उपयोग करें। कोड आपके प्रश्न से HTML c:\Temp\page1.html फ़ाइल में उपयोग करता है।

Option Explicit 

' Add reference to Microsoft Internet Controls 
' Add reference to Microsoft HTML Object Library 

Sub AddInfoFromIntranet() 

    Dim ie As SHDocVw.InternetExplorer 
    Dim doc As MSHTML.HTMLDocument 
    Dim elements As MSHTML.IHTMLElementCollection 
    Dim nachnameValueInput As MSHTML.HTMLInputElement 

    Set ie = New SHDocVw.InternetExplorer 

    With ie 
     .Visible = True 
     .navigate "c:\Temp\page1.html" 
     Do Until Not .Busy And .readyState = 4 
      DoEvents 
     Loop 

     Set doc = .document 
     Set elements = doc.getElementsByName("Nachnamevalue") 

     If Not elements Is Nothing Then 
      Set nachnameValueInput = elements(0) 
      If Not nachnameValueInput Is Nothing Then _ 
       nachnameValueInput.Value = "{here goes whar I want to insert}" 
     End If 

     .Quit 
    End With 

    Set ie = Nothing 

End Sub 

सभी इनपुट तत्व है जो momonet आप जिस पृष्ठ पर getElementsByTagName("input") इस्तेमाल कर सकते हैं पर VBA कोड निष्पादित पर मौजूद हैं के नाम की जाँच करें।

Set elements = doc.getElementsByTagName("input") 

    If Not elements Is Nothing Then 
     Dim inputElement 
     For Each inputElement In elements 
      Debug.Print inputElement.Name 
     Next inputElement 
    End If 
+0

इस मामले में तत्व (0) खाली है और 'nachnameValueInput कुछ भी नहीं है' = झूठी – Noldor130884

+0

फिर तत्व नाम 'Nachnamevalue' पृष्ठ पर मौजूद नहीं है। क्या नाम गलत वर्तनी हो सकती है? यह इसके बजाय 'NachnameValue' हो सकता है? '' 'F12''' का प्रयोग करें और इसे जांचें। – dee

+0

मैंने वेबपृष्ठ से कोड कॉपी किया है ... यह गलत वर्तनी नहीं हो सकती है। @dee: मैंने आपके संपादन में जो सुझाव दिया है, मैंने कोशिश की ... debug.print कुछ भी नहीं पैदा करता – Noldor130884

0

आप जितने चाहें सभी इनपुट साइकिल और का चयन एक नाम पर है की कोशिश कर सकते हैं:

Set Elements = IE.document.getelementsbytagname("Input") 
For Each Element In Elements 
    If Element.Name = "Nachnamevalue" Then 
     Element.Value = {Here your value} 
     Exit For 
    End If 
Next Element 
+0

T_T काम नहीं करता है! मुझे समझ में नहीं आता कि मैं क्या कर रहा हूं – Noldor130884

+0

यह अजीब बात है। कोड पूरी तरह से मेरे लिए काम किया। क्या आपने {एंटनी "(या किसी और के साथ) के साथ {यहां अपना मूल्य} बदल दिया है? – genespos

+0

बेशक मैंने ^^ – Noldor130884

संबंधित मुद्दे