2013-07-01 34 views
6

Tôi đang cố gắng sử dụng VBA để gửi dữ liệu từ Excel sang biểu mẫu web trực tuyến. Vấn đề xảy ra trong khu vực * nơi tôi đang cố gắng chọn và cập nhật biểu mẫu. Tôi đã thử một loạt các tùy chọn (getelement bởi ID, tên, vv) mà không có bất kỳ thành công. Tôi tin rằng vấn đề liên quan đến việc xác định yếu tố phù hợp. Tôi đã nhìn thấy lời khuyên về việc sử dụng các tính năng người dân địa phương trong VBA, nhưng tôi không chắc chắn làm thế nào để sử dụng cho mục đích này. Tôi có cảm giác ai đó với một số kinh nghiệm có thể hình dung điều này một cách nhanh chóng bằng cách xem mã nguồn trên webiste, sử dụng Locals in VBA, hoặc một số kỹ thuật khác.VBA để nhập dữ liệu trực tuyến và gửi mẫu

Biểu mẫu được thiết lập để tất cả các trường đều là văn bản và tôi có thể nhập/gửi dữ liệu trực tuyến mà không có vấn đề gì.

Cảm ơn trước vì bất kỳ trợ giúp/đề xuất nào.

Dim IE As Object 

Sub submitFeedback3() 
Application.ScreenUpdating = False 

Set IE = CreateObject("InternetExplorer.Application") 
IE.Visible = True 
IE.Navigate "http://spreadsheetbootcamp.com/excel-efficiency-trainer-feedback/" 

Application.StatusBar = "Submitting" 
    ' Wait while IE loading... 
While IE.Busy 
DoEvents 
Wend 
********************************************************************** 
IE.Document.getElementById("Form_Attempts-1372643500")(0).Value = "1" 
IE.Document.getElementById("submit-1-1372643500")(0).Click 
********************************************************************** 
Application.StatusBar = "Form Submitted" 
IE.Quit 
Set IE = Nothing 

Application.ScreenUpdating = True 
End Sub 
+0

Trang đó là hoàn toàn bị phá vỡ trong IE8 –

+0

Bạn có thể nhập dữ liệu/nộp? Đó là mục đích duy nhất của trang web này. –

+0

Tất cả những gì tôi thấy là một tá hộp văn bản không được gắn nhãn và nút "gửi". Nhìn vào HTML mặc dù, bạn nên cố gắng điền các hộp văn bản dựa trên tên của chúng (xuất hiện là hằng số) so với Id của chúng (có vẻ có hậu tố số thay đổi) –

Trả lời

4

Hãy thử mã dưới đây

Dim IE As Object 

Sub submitFeedback3() 
    Application.ScreenUpdating = False 

    Set IE = CreateObject("InternetExplorer.Application") 
    IE.Visible = True 
    IE.Navigate "http://spreadsheetbootcamp.com/excel-efficiency-trainer-feedback/" 

    Application.StatusBar = "Submitting" 
    ' Wait while IE loading... 
    While IE.Busy 
     DoEvents 
    Wend 
    ' ********************************************************************** 
    delay 5 
    IE.Document.getElementById("experience-1372700847").Value = "ddddd1" 
    delay 5 
    IE.Document.getElementById("Form_Time_Best-1372700847").Value = "ddddddddddd2" 
    delay 5 
    IE.Document.getElementById("submit-1-1372700847").Click 
    '********************************************************************** 
    Application.StatusBar = "Form Submitted" 
    IE.Quit 
    Set IE = Nothing 

    Application.ScreenUpdating = True 
End Sub 

Private Sub delay(seconds As Long) 
    Dim endTime As Date 
    endTime = DateAdd("s", seconds, Now()) 
    Do While Now() < endTime 
     DoEvents 
    Loop 
End Sub 
+0

Tôi đã sử dụng một thiết lập khác cho các biểu mẫu và có mọi thứ hoạt động hoàn hảo. Cảm ơn các đề xuất rất dễ. –

+0

Tôi đang sử dụng cùng một mã. Cuối cùng nó nhấp vào một nút để điều hướng đến một trang mới. Một khi đã xong, tôi không thể truy cập các phần tử của trang mới. Tôi có thể thiếu gì. – Richa

+0

@Richa Bạn nên đảm bảo rằng trang của bạn đã tải xong. Tôi tạo ra một tiểu đơn giản để giúp thực hiện điều này: 'Sub IEBusy (IE_Object As Object)' 'Do Trong khi IE_Object.Busy hoặc IE_Object.ReadyState <> 4'' DoEvents' 'Loop'' Exit Sub'. Sau đó bạn chỉ cần sử dụng 'Gọi IEBusy (IE)' và thật đơn giản khi đợi trang tải xong. –

Các vấn đề liên quan