2015-11-23 4 views
1

Я получаю ошибку времени выполнения «438» (объект не поддерживает это свойство или метод) при попытке щелкнуть по кнопке с помощью VBA на веб-сайте PHP, и я искал поисковые запросы для последние несколько часов и не могу найти способ обойти его.VBA Submit Button Нажав

Этот код ниже делает все, что мне нужно, но не могу найти, как нажать на кнопку без нее не удается, попробовал следующее:

IE.Document.getElementsByName("Calculate").Click 
IE.Document.getElementsByID 
IE.Document.getElementsByClassName 

и т.д. все терпят неудачу.

код для кнопки, как я вижу ниже:

<button onclick="calculate();" class="btn btn-primary">Calculate</button> 

Так при использовании ByClassName я использовал BTN BTN первичной и по имени я Calculate. Я теряю голову сейчас, какие-то идеи? Код ниже:

p.s используя IE11 если это имеет значение.

Sub testWeb() 
    Dim sht As Worksheet 
    Dim IE As Object 

    Dim Item As Variant 
    Dim objElement As Object 

    Set sht = ActiveSheet 
    Set IE = CreateObject("InternetExplorer.Application") 
    'Open IE 
    IE.Visible = True 
    IE.Navigate "http://www.doogal.co.uk/DrivingDistances.php" 

    'Wait until site is loaded 
    Do While IE.ReadyState <> 4 'READYSTATE_COMPLETE 
     DoEvents 
    Loop 


    IE.Document.getElementById("startLocs").Value = "TEST" 
    IE.Document.getElementById("endLocs").Value = "TEST1" 
    IE.Document.getElementsByName("Calculate").Click 

    IE.Document.forms(1).submit  


End Sub 
+1

Есть ли конкретная причина, по которой вы используете VBS на веб-сайте? Потому что, если нет, не делайте этого. Перейдите на javascript. VBS подобен злобному маленькому младшему брату JS, которого никто не любит. –

+0

Его пробел в знаниях tbh pal :), мне нужна информация в Excel, поэтому я использую то, что знаю, чтобы вставлять эти данные. – JamieB

+1

Не знаете, как Роб фигурирует, это VBS ... Вы бы подумали, что несколько ссылок на VBA будут отличать это. Возможно, VBA и VBS являются взаимозаменяемыми условиями для парней JS. :) Во всяком случае, я + 1 сделал это, чтобы противостоять -1 на всякий случай, если это было от кого-то, кто не читал. – Tim

ответ

1

У вас есть 2 номера с кодом отправлено.

  1. Метод .getElementsByName возвращает коллекцию элементов. Вам нужно будет выяснить, какой элемент является элементом, который вы хотите щелкнуть. Так что ваш код должен быть что-то вроде этого:

    IE.Document.getElementsByName("Calculate").Item(5).Click

  2. Если HTML вы вывесили от фактического места, то <BUTTON> не имеет name свойства, так что он не будет в коллекции элементов возвращается getElementsByName.

Возможно, вам придется исследовать другой метод поиска вашего элемента DOM. IDK, сколько кнопок находится в форме, и я не знаю, какой класс назначен каждой кнопке, но, возможно, вы можете сделать getElementsByTagName, затем проведите через каждый item, глядя на свой .class или вы можете getElementsByClassName и пропустите эту коллекцию, пока не найдете элемент кнопки .type.

+0

Бум, ты легенда :). Это было имя ByClassName, в котором я нуждался, и .Item (0) .click вместо простого нажатия. Бум :) – JamieB