Как «сфокусировать клавиатуру» на веб-странице, только что открытой ShellExecute?

#vba #google-chrome #outlook

#vba #google-chrome #outlook

Вопрос:

Я открываю все гиперссылки в электронном письме Outlook с помощью ShellExecute .

Я хочу сохранить все открытые веб-страницы (мой браузер по умолчанию — Chrome).

Я пробовал SendKeys . Я подозреваю, что мне нужно поместить некоторые коды после ShellExecute и до SendKeys , чтобы он распознал открытые веб-страницы как «активные». Другими словами, я хотел бы установить фокус клавиатуры на веб-странице Chrome, которая была открыта.

 Private Declare PtrSafe Function ShellExecute _
  Lib "shell32.dll" Alias "ShellExecuteA" ( _
  ByVal hWnd As Long, _
  ByVal Operation As String, _
  ByVal Filename As String, _
  Optional ByVal Parameters As String, _
  Optional ByVal Directory As String, _
  Optional ByVal WindowStyle As Long = vbMinimizedFocus _
  ) As Long

Sub OpenLinksMessage()
    Dim olMail As Outlook.MailItem
    Dim Reg1 As RegExp
    Dim M1 As MatchCollection
    Dim M As Match
    Dim strURL As String
    Dim lSuccess As Long
 
    Set olMail = Application.ActiveExplorer().Selection(1)

    Set Reg1 = New RegExp

    With Reg1
        .Pattern = "(https?[:]//([0-9a-z=?:/.amp;-^!#$%;_])*)"
        .Global = True
        .IgnoreCase = True
    End With

    If Reg1.Test(olMail.Body) Then

        Set M1 = Reg1.Execute(olMail.Body)
        For Each M In M1
            strURL = M.SubMatches(0)
            Debug.Print strURL
            If InStr(strURL, "unsubscribe") Then GoTo NextURL
            If Right(strURL, 1) = ">" Then strURL = Left(strURL, Len(strURL) - 1)

            lSuccess = ShellExecute(0, "Open", strURL)
            DoEvents

            'This is where I think I need codes

            SendKeys ("^S"), True
            SendKeys ("name"), True
            SendKeys "{Enter}", True

NextURL:
  
        Next
    End If

    Set Reg1 = Nothing
End Sub
 

После выяснения этого я настрою коды, чтобы сделать это в цикле, чтобы открыть и сохранить более 100 ссылок.

Комментарии:

1. У меня есть этот код с использованием объекта IE, но я думаю, что это не то, что вы хотите, верно? И что именно вы хотите сохранить с помощью CTRL S? Мы можем сделать лучше, чем отправлять ключи для вас, если вы укажете цель…

2. Спасибо за ваш ответ. К сожалению, я не могу использовать Internet Explorer (IE) — гиперссылка, которую я пытался открыть, поддерживается только Chrome. Чтобы уточнить, что мне действительно нужно, это установить фокус клавиатуры на веб-странице Chrome, которую я открыл.

Ответ №1:

Я прокомментировал, что мы можем использовать IE object и улучшить способы автоматизации этого процесса

но, отвечая на ваш вопрос, вы можете попробовать

 Dim i As Integer

SendKeys ("^S"), True
On Error Resume Next
For i = 1 To 100
    VBA.AppActivate ("Save As")
Next i
On Error GoTo 0
SendKeys ("name"), True
SendKeys "{Enter}", True
 

Комментарии:

1. Я добавил ваш код и получил «Ожидаемая ошибка компиляции: выражение»