2013-12-16 2 views
6

Я пытаюсь ввести значение в a из страницы интернет-исследователя с помощью VBA. Я видел похожие сообщения, но, похоже, не могу точно определить свою проблему. Я немного уверен в VBA, но HTML для меня новичок. Атрибуты идентификатора меняются на веб-странице, к которой я обращаюсь каждый раз при загрузке страницы. Вот снимок HTML элемента я пытаюсь получить доступ к:Введите текст в поле ввода html с помощью vba

<input type="text" size="20" style="text-align: right; width: 261px;" autocomplete="off" id="ext-comp-1067" name="user_numbers.1.number_1" class="x-form-text x-form-field x-form- num-field" title=""> 

Код Сейчас я использую здесь:

Sub OpenWebPage() 

    Dim ObjCollection As Object 
    Dim i As Long 
Dim objElement As Object 
Dim doc As Object 
Dim form As Object 



    Dim ie As Object 
    Set ie = CreateObject("INTERNETEXPLORER.APPLICATION") 
    ie.Navigate "http://11.182.123.21/#!/view/dashboards/dashboard-1" 
    ie.Visible = True 
    While ie.Busy 
     DoEvents 
    Wend 


    Application.Wait Now + TimeValue("00:00:10") 

Set ObjCollection = ie.Document.getElementsByName("user_numbers.1.number_1").Value = "123" 

End sub 

Название «user_number.1.number_1» Я думаю, что это только элемент в html, который я могу использовать для поиска этого окна ввода, ID меняется каждый раз, когда вы открываете веб-страницу. Как мне получить значение в этом поле?

Спасибо!

+0

Идентификатор также изменяет идентификатор «id =» ext-comp-1067 «'? –

+0

Да, это изменяется при каждом закрытии веб-страницы и ее перезагрузке. Имя не меняется, поэтому я пытаюсь его использовать. – user3107346

+0

у вас есть дополнительный знак «=». –

ответ

5

Как упоминалось выше, у вас есть дополнительный знак «=».

Заменить

Set ObjCollection = ie.Document.getElementsByName("user_numbers.1.number_1").Value = "123" 

с

ie.Document.getElementsByName("user_numbers.1.number_1")(0).Value = "123" 

Это просто от моей головы и не тестируется код. Если это не сработает, замените (0) в вышеуказанном коде (1).

Если на странице с тем же именем нет другого элемента, это будет работать. В противном случае замените (0) в приведенном выше описании с соответствующим порядковым положением.

+0

Да, извините, я забыл вынуть дополнительный знак «=», который был частью чего-то другого, что я пытался. @pradeep Kumar, я пробовал, как вы упомянули выше, с еще не повезло. Я получаю «ошибка времени выполнения 91, переменная объекта или с заблокированной переменной блока». И спасибо вам за ваш вклад! – user3107346

+1

+ 1 Работает для меня –

+0

Я пытаюсь использовать тот же код выше, и я все еще прихожу к той же ошибке. Msgstr "Переменная объекта или переменная блока не установлена". – user3107346

0

Как о поиске ID каждый раз, как этот

my_var = ie.doc.body.innerhtml 

pos_1 = instr(1, my_var, "user_numbers.1.number_1", vbTextCompare) 
pos_2 = InStrRev(my_var, "id", pos_1, vbTextCompare) 
pos_3 = instr(pos_2, my_var, "name", vbTextCompare) 

my_id = mid(my_var, 3+pos_2, (-1+pos_3) - (3+pos_2) 

теперь попробуйте

ie.Document.getElementById(my_id).Value = "123" 

Я не могу получить доступ к URL, так что вы, возможно, придется подправить цифры складывать и вычитать в «средняя» функция

+0

Рон, я боюсь, что это немного над моей головой. Я не уверен, как использовать код, который вы опубликовали. Я вижу, что вы пытаетесь достичь.Как я могу определить все введенные новые переменные? Кроме того, любые идеи о том, почему этот код не работает? Имя уникально, и я не могу записать в поле ввода. 'Code' ie.Document.getElementsByName ("user_numbers.1.number_1") (0) .Value = "123" 'Code' – user3107346

+0

Кроме того, я новичок здесь и не могу понять, как правильно размещать код в отдельных блоках, когда добавив комментарий. Любая помощь там также будет отличной. Благодаря! – user3107346

+0

Не нужно определять новые переменные. Просто попробуйте поместить мой код после строки «Application.Wait». Пройдите код, используя F8, и посмотрите, есть ли у вас желаемый идентификатор. «InStr» находит цифровую позицию первого символа в поисковом выражении (например, «ID») в my_var (который в этом случае содержит исходный код за веб-страницей). InStrRev делает то же самое в обратном порядке (см. Справка Excel VBA для правильного синтаксиса и лучшего объяснения). Поэтому мы просто используем pos_1, _2 и _3 для определения местоположения «ID» в исходном коде. Затем мы используем «mid» для извлечения фактического идентификатора из исходного кода. – ron

Смежные вопросы