0

Я пытаюсь войти в веб-сайт, а затем загрузить несколько фотографий, но я не буду дальше. Когда откроется диалоговое окно, я не могу программно его контролировать. Я попытался определить объект как FileDialog, а также использовать Application.SendKeys, но кажется, что диалог не является приложением.Open Dialog IE Automation VBA

+1

вы должны добавить код на вопрос – 0m3r

+0

я считаю, вы должны работать на объекте браузера Internet Explorer, а не FileDialog. Но сначала отправьте код. – nhee

ответ

0

Вы должны будете использовать объект браузера с кодом похожее на это:

.

Set browser = CreateObject("InternetExplorer.Application") 

browser.Visible = True 

brwser.navigate "http://stackoverflow.com/..." 'your address 

Sleep 1000 'wait for 1 second 

With browser.Document 
    Set txtUsr = .getElementsByName("Username") 
    Set txtPass = .getElementsByName("UserPass") 
    Set btnLogin = .getElementById("btnLogin") 
End With 

txtUsr.innerText = "User Name" 
txtPass.innerText = "Password" 
btnLogin.Click 

.

и так далее ...

  • Использование DOM и попытаться избежать SendKeys, если это возможно

  • «Сон» использует API, который может быть объявлен в верхней части модуля, как это :

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

.

Редактировать: Я заметил, что вы на самом деле пытаетесь взаимодействовать с диалоговым окном, а не с страницей браузера. Если это так, вам нужно будет использовать функции Windows API, чтобы иметь возможность сначала идентифицировать его из VBA; Я предложил бы использовать "FindWindow":

Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (_ 
ByVal lpClassName As String, _ 
ByVal lpWindowName As String _ 
) As Long 

и вызывать его из VBA, как это:

setMyDialog = FindWindow(vbNullString, dialogCaption) 

затем отправить ключи к нему; вы можете отправить клавишу «Tab», чтобы перейти от одного текстового поля к следующему

Если веб-сайт использует это диалоговое окно для выбора нескольких изображений, это будет сложнее автоматизировать; вам придется использовать другие методы записи, чтобы имитировать выбор нескольких файлов или действия перетаскивания и падение с помощью мыши

Вот некоторые ссылки, которые могут помочь с функциями API:

.

Редактировать для 3 вопроса:

  • «Я получаю сообщение об ошибке, когда я использую функцию Что-то с 64-битной системой ....» - у вас есть 64 разрядной версия Excel так заменить это заявление

.

Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (_ 
    ByVal lpClassName As String, _ 
    ByVal lpWindowName As String _ 
) As Long 

с этим:

Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (_ 
    ByVal lpClassName As String, _ 
    ByVal lpWindowName As String 
) As LongPtr 

.

  • «Когда я скопировать функцию VBA говорит, что только комментарии могут появиться после End Sub ...»

Это заявление, поэтому он должен быть размещен в верхней части модуля (до любой другие функции)

  • Что следует писать вместо «vbNullString» и «dialogCaption» ??

Вы все еще можете использовать «vbNullString» в качестве первого аргумента, но вы должны заменить «dialogCaption» с названием вашего диалогового окна

  • не используют кавычки для vbNullString
  • используем кавычки для заголовка диалогового
+0

Что я должен писать вместо «vbNullString» и «dialogCaption» ?? – Udarnicus

+0

Я получаю сообщение об ошибке при использовании функции. Что-то с 64-битной системой, что код должен быть обновлен – Udarnicus

+0

Когда я копирую функцию VBA говорит, что после End Sub, End Function и End Property могут появляться только комментарии. Где я должен вставлять ее? – Udarnicus

0

Привет мой код выглядит так:

1.I define an obj as internetexplorer.aplication 
2.I login and then I want to upload a photo so I click the button for upload 
' all works till now 
3.Now I try to interact with the dialog that let's me to choose the photos programmatically and their is my problem 

Спасибо, Пол, я попробую сегодня!

С наилучшими пожеланиями

Удар