¿Hay alguna manera de saber qué tecla se presiona si se usa un navegador web en un formulario de usuario?
Gracias por adelantado :)
Editar: básicamente quiero abrir un formulario de usuario diferente en KeyDown, pero WebBrowser lo impide. Tal vez pueda ejecutar un Sub de mi UserForm desde WebBrowser.
Bien, aquí hay un ejemplo muy básico para mostrar que puede enviar un mensaje a la página HTML desde VBA y enviar un mensaje en la otra dirección:
Formulario de usuario:
Option Explicit Dim obj As webEvents 'must be Global to remain in scope... 'send a message to the browser page Private Sub CommandButton1_Click() 'would need to escape the text sent if it contains (eg) ' Me.WebBrowser1.Document.parentWindow.execScript "MessageIn('" & Me.TextBox1.Text & "')" End Sub 'receive a message from the browser page Public Sub HandleBrowserMessage(s As String) MsgBox "From web:" & vbLf & s End Sub Private Sub UserForm_Initialize() Me.WebBrowser1.Navigate "about:blank" 'load a blank document Application.Wait Now + TimeSerial(0, 0, 1) With Me.WebBrowser1.Document 'load some HTML .Open "text/html" .write Sheet1.Range("A1").Value .Close End With Set obj = New webEvents 'new class instance Set obj.ParentForm = Me 'for the callback Set obj.HtmlOutput = Me.WebBrowser1.Document.getElementById("msgOut") End Sub Módulo de clase webEvents :
Option Explicit Public ParentForm As Object 'not As userform! Public WithEvents HtmlOutput As MSHTML.HTMLInputElement 'handling click since change seems unreliable Private Function HtmlOutput_onclick() As Boolean ParentForm.HandleBrowserMessage CStr(HtmlOutput.Value) End FunctionHTML en la celda A1:
<html><body> <input type="hidden" id="msgOut" /><br> To VBA: <input type="text" size="20" id="msg" /> <button onclick="MessageOut()">Send to VBA</button><br><br> From VBA: <span id="showMessage" style="color:#F00"></span><br> <script> function MessageIn(s){ document.getElementById("showMessage").innerText = s; } function MessageOut(s){ var el = document.getElementById("msgOut"); el.value = document.getElementById("msg").value; el.click(); } </script> </body></html>