2013-10-30 77 views
2

我試圖從不同的網站收集數據。因此,我使用Excel VBA並啓動Internet Explorer。我可以填寫一個正常的表格。但有時我必須填寫一個帶有jQuery腳本的動態表單。火與vba事件和InternetExplorer.Application重新計算jQuery表單

如果前2個字段被填寫並且事件被觸發,表單將只啓用所有輸入字段(下拉菜單)。

所以我的腳本能夠填寫表格,但不能激發需要的「重新計算」事件。

如果您使用鼠標手動填寫表單,它將起作用。我怎樣才能模擬這個事件?

這是我的Excel VBA中的腳本:

Sub test_fill_form() 

Dim url1 As String 
Dim url2 As String 
Dim url3 As String 

url1 = "https://auto." 
url2 = "ar" 
url3 = "do.ch/selling/?step=1&uniqueid=8a7d2327-f426-4df7-8291-d6b55fc62e3c" 

Dim ie As Object 
Set ie = CreateObject("InternetExplorer.Application") 

ie.Visible = True 
apiShowWindow ie.hwnd, SW_MAXIMIZE 
ie.navigate url1 & "ric" & url2 & url3 

While ie.readyState <> 4: DoEvents: Wend 

ie.document.all("Article_ArticleDetails_AutoRegistrationMonth").Click 
ie.document.getElementById("Article_ArticleDetails_AutoRegistrationMonth").value = "1" 
ie.document.getElementById("Article_ArticleDetails_AutoRegistrationYear").value = "2013" 
End Sub 
+0

謝謝您的回覆。 問題是,當我填充下拉MARKE具有值: ie.document.getElementById(「Article_ArticleDetails_AutoMakeId」)值=「9」(BMW) 應該在隨後的下拉加載的數據(參數及): ie.document.getElementById(「Article_ArticleDetails_AutoModelId」) 如果使用鼠標執行此操作,則會在下拉列表中加載數據:AutoModelId(Modell)。 是否可以觸發一個事件,該數據是在該下拉列表中加載的? 非常感謝! – user2929630

回答

3

感謝您的幫助

現在我有解決方案:

ie.Document.getElementById("Article__").Click 
ie.Document.getElementById("Article_ArticleDetails_").Focus 
ie.Document.getElementById("Article_ArticleDetails_").Value = "9" 

'This will run the java script/fire the recalc event 
ie.Document.parentWindow.execScript "registrationUpdate()", "JavaScript" 

感謝所有。

1

對於鏈接提供的表格有殘疾下拉卻有着選項元素在裏面,所以你可以設置成false禁用,可以做進一步的處理。 (下拉不等待Ajax請求得到填補)

Sub test_fill_form() 

Dim url1 As String 
Dim url2 As String 
Dim url3 As String 

url1 = "https://auto." 
url2 = "ar" 
url3 = "do.ch/selling/?step=1&uniqueid=8a7d2327-f426-4df7-8291-d6b55fc62e3c" 

Dim ie As Object 
Set ie = CreateObject("InternetExplorer.Application") 

ie.Visible = True 
'apiShowWindow ie.Hwnd, SW_MAXIMIZE 
ie.navigate url1 & "ric" & url2 & url3 

While ie.readyState <> 4: DoEvents: Wend 

ie.document.all("Article_ArticleDetails_AutoRegistrationMonth").Click 
ie.document.getElementById("Article_ArticleDetails_AutoRegistrationMonth").Value = "1" 
ie.document.getElementById("Article_ArticleDetails_AutoRegistrationYear").Value = "2013" 
ie.document.getElementById("Article_ArticleDetails_AutoMakeId").disabled = False 
ie.document.getElementById("Article_ArticleDetails_AutoModelId").disabled = False 
ie.document.getElementById("Article_ArticleDetails_AutoFuel").disabled = False 
End Sub 
+1

@ user2929630您也可以直接撥打這個網址http://auto.ricardo.ch/selling/_vehicleregistration/?Article_ArticleDetails_AutoRegistrationMonth=1&Article_ArticleDetails_AutoRegistrationYear=2013&_=1383159004821 – Santosh