我想要做的是从同一 Microsoft Access 应用程序中的 Web 浏览器控件中的 HTML 打开 Microsoft Access 表单。
Web 浏览器控件用于生成比尝试使用连续表单执行某些操作更可预测的可视输出。这对于只读输出来说很好,并且我不希望能够编辑控件中的数据。然而,能够写入插入到控件中的 HTML 将会非常有用,这是一种打开 Web 控件所在的 MS Access 文件中已有表单之一的方法。
以下是如何在 HTML 中使用带有按钮的 WebBrowser 控件,其中单击按钮会执行 VBA 代码。然后该代码可以打开一个表单。
将控件的控制源设置为
="about:blank"
。
在表单后面的代码中,假设控件名为
WBControl
,请执行以下操作:
Dim WBDocument As HTMLDocument
Dim WBBody As HTMLBody
Dim WithEvents Button_1 As HTMLButtonElement
Dim WithEvents Button_2 As HTMLButtonElement
Private Sub WBControl_DocumentComplete(ByVal pDisp As Object, URL As Variant)
If pDisp.ReadyState = READYSTATE_COMPLETE Then
Set WBDocument = pDisp.Document
Set WBBody = WBDocument.body
WBBody.innerHTML = "Choose between <button id=btn-1>Click Me!</button>" & _
" and <button id=btn-2>No, Click Me!!</button>"
Set Button_1 = WBDocument.getElementById("btn-1")
Set Button_2 = WBDocument.getElementById("btn-2")
End If
End Sub
Private Function Button_1_onclick() As Boolean
Debug.Print "User clicked the first button."
End Function
Private Function Button_2_onclick() As Boolean
Debug.Print "User clicked the second button."
End Function
我通常使用
,而不是将事件处理程序附加到单个元素Dim WithEvents WBBody As HTMLBody
然后检查单击的元素以查看下一步要做什么:
Sub WBBody_onmousedown()
Dim ev As IHTMLEventObj
Dim el As HTMLObjectElement
Set ev = WBDocument.parentWindow.event
Set el = ev.srcElement
Debug.Print "User clicked a <"; el.tagName; "> element with id="; el.ID
End Sub
如果单击的元素包含不感兴趣的子元素,您可以使用
el.parentElement
在 DOM 树中向上移动,查找要视为可单击的元素。例如,响应表格单元格上的点击,无论单元格内容的复杂性如何。