Создайте макрос для копирования из ячейки в Excel в текстовое поле в браузере, затем нажмите кнопку «Добавить». - PullRequest
1 голос
/ 09 марта 2012

Я уже создал Макрос, используя стороннее приложение, которое делает то, что я хочу, 80% времени. Проблема в том, что я не могу оставить его включенным, потому что он иногда выдает ошибку или браузер реагирует немного дольше.

Я хотел бы знать, смогу ли я создать то, что я хотел, в менеджере макросов, который поставляется с Excel (VBA).

Я хочу:

  1. Скопируйте из A1, перейдите в браузер, вставьте в текстовое поле 1 (примерно на полпути вниз страницы)
  2. Вернитесь в Excel, скопируйте из B1, перейдите в браузер, вставьте в текстовое поле 2
  3. Нажмите кнопку в браузере с надписью «Добавить»
  4. Подождите, пока не исчезнет всплывающее окно (предупреждение javascript)
  5. Промыть и повторить X раз, на этот раз из A2 и B2.

Вы можете помочь?

1 Ответ

2 голосов
/ 09 марта 2012

user1242345, есть два способа сделать это.

Путь 1

Вы можете запустить URL-адрес в WebBrowser1 из VBA и затем напрямую записать в текстовое полеиспользуя .GetElementByID

Например

WebBrowser1.Document.getElementById("TextBoxName").Value = "Whatever"

Путь 2

Использовать XMLHTTP.Это намного быстрее, чем Путь 1

Если вы можете поделиться ссылкой, то я могу дать вам точный ответ?

FOLLOWUP

Спасибо за ваш ответ .. Я не могу дать вам ссылку, так как это страница, защищенная паролем.Однако вот HTML для формы, в которую я хочу вставить, если это поможет.pastebin.com/cWrwfKBf - user1242345 17 минут назад

Оба, я хотел бы скопировать из ячейки A1 и вставить в Feed_name, затем вернуться в Excel и скопировать из B1 и вставить в feed_url.Спасибо за вашу помощь, я действительно ценю это.- user1242345 5 минут назад

Я скопировал исходный код в текстовый файл и сохранил его как Test.Htm на своем рабочем столе.Пожалуйста, посмотрите пример ниже о том, как писать в первое текстовое поле.Я уверен, что вы можете повторить это для следующего;)

Чтобы запустить это, создайте пользовательскую форму в Excel и поместите элемент управления WebBrowser1 и элемент управления CommandButton в форму.См. Снимок.

SNAPSHOT 1

enter image description here

Вставьте этот код в область кода пользовательской формы.

Private Sub CommandButton1_Click()
    Dim url As String

    url = "C:\Documents and Settings\Siddharth Rout\Desktop\Test.Htm"

    WebBrowser1.Navigate url
    WaitForWBReady

    WebBrowser1.Document.getElementById("feed-create-feed_name").Value = "Whatever"
End Sub

Private Sub Wait(ByVal nSec As Long)
    nSec = nSec + Timer
    While Timer < nSec
        DoEvents
    Wend
End Sub

Private Sub WaitForWBReady()
    Wait 1
    While WebBrowser1.ReadyState <> 4
        Wait 3
    Wend
End Sub

Когда вы нажимаете на кнопку, текст автоматически заполняется, как показано ниже.

SNAPSHOT 2

enter image description here

MOREFOLLOWUP

К сожалению, я впервые использую VB, поэтому мне не удается создать этот цикл .. :( - user1242345 2 минуты

Обычно я не выкладываю решение в таком сценарии, но советую Asker изучить VBA, но так как я уже опубликовал большой кусок, поэтому я закончу его длявас. Но после любых последующих вопросов от вас должен следовать код, который вы написали сами :)

UNTESTED

Попробуйте это

Private Declare PtrSafe Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long) 

Private Sub CommandButton1_Click()
    Dim ws As Worksheet
    Dim url As String
    Dim lastRow As Long

    url = "C:\Documents and Settings\Siddharth Rout\Desktop\Test.Htm"

    '~~> This is the sheet where the values has to be picked up from
    Set ws = Sheets("Sheet1") 

    With ws
        '~~> Get the Last Row in Sheet1
        lastRow = .Range("A" & .Rows.Count).End(xlUp).Row

        '~~> Loop through the range
        For i = 1 To lastRow
            '~~> Navigate to the URL
            WebBrowser1.Navigate url
            WaitForWBReady

            '~~> Input Values
            WebBrowser1.Document.getElementById("feed-create-feed_name").Value = .Range("A" & i).Value
            WebBrowser1.Document.getElementById("feed-create-feed_url").Value = .Range("B" & i).Value

            '~~> Click Button
            WebBrowser1.Document.getElementsByTagname("Input")(3).Click

            WaitForWBReady
        Next
    End With
End Sub

Private Sub Wait(ByVal nSec As Long)
    nSec = nSec + Timer
    While Timer < nSec
        DoEvents
        Sleep 100
    Wend
End Sub

Private Sub WaitForWBReady()
    Wait 1
    While WebBrowser1.ReadyState <> 4
        Wait 3
    Wend
End Sub

HTH

Sid

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...