2013-07-01 3 views
6

Próbuję użyć VBA do przesyłania danych z programu Excel do formularza internetowego. Problem występuje w obszarze *, w którym próbuję wybrać i zaktualizować formularz. Próbowałem różnych opcji (getelement po ID, imię itp.) Bez powodzenia. Uważam, że problem dotyczy identyfikacji odpowiedniego elementu. Widziałem porady dotyczące używania funkcji Locals w VBA, ale nie jestem pewien, jak używać tego do tego celu. Mam wrażenie, że ktoś z pewnym doświadczeniem może to bardzo szybko zrozumieć, patrząc na kod źródłowy na stronie, używając Locals w VBA lub innej techniki.VBA do wprowadzania danych online i przesyłania formularza

Formularz jest skonfigurowany, więc wszystkie pola są tekstowe i mogę bez problemu wprowadzić/wysłać dane online.

Z góry dziękujemy za wszelką pomoc/sugestie.

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

tej strony jest całkowicie uszkodzony w IE8 –

+0

można wprowadzić dane/złożyć? To jest jedyny cel tej strony. –

+0

Widzę tylko tuzin nieoznakowanych pól tekstowych i przycisk "wyślij". Patrząc na HTML, lepiej byłoby spróbować wypełnić pola tekstowe na podstawie ich nazw (wydaje się, że są stałe) niż ich identyfikatory (które wydają się mieć zmienny przyrostek liczbowy). –

Odpowiedz

4

Spróbuj poniżej kod

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

Użyłem innej konfiguracji dla formularzy i wszystko działało idealnie. Dzięki za sugestię. –

+0

Używam tego samego kodu. Na koniec klika przycisk, aby przejść do nowej strony. Gdy to zrobię, nie mogę uzyskać dostępu do elementów nowej strony. Czego może mi brakować? – Richa

+0

@Richa Należy upewnić się, że strona została załadowana. Stworzyłem prosty sub, aby pomóc osiągnąć to: 'Sub IEBusy (IE_Object As Object)' 'Do While IE_Object.Busy lub IE_Object.ReadyState <> 4'' DoEvents' 'Loop'' Exit Sub'. Po prostu używaj 'Call IEBusy (IE)' i tak łatwo poczekać na zakończenie ładowania strony. –