MultiPage切换标签后WebBrowser控件调用IWebBrowser2的Navigate方法失败
问题场景
在VBA用户窗体的MultiPage控件第4页中添加了WebBrowser1控件,搭配两个按钮分别导航至msn.com和google.com。初始打开窗体显示第4页时功能正常,但切换到其他页面再返回第4页后,点击按钮会触发错误:'Navigate' of object 'IWebBrowser2' failed。
原按钮代码:
Private Sub CommandButton23_Click() Me.WebBrowser1.Navigate ("https://www.msn.com") End Sub Private Sub CommandButton24_Click() Me.WebBrowser1.Navigate ("https://google.com") End Sub
问题原因
MultiPage控件切换页面时,非当前显示页面上的ActiveX控件会被系统卸载,导致Me.WebBrowser1的原有对象引用失效。返回第4页后,控件虽然可见,但引用已指向无效对象,调用Navigate方法时就会报错。
解决方案
方案1:通过MultiPage的Page集合获取控件引用
修改按钮点击事件代码,直接从第4页的Controls集合中获取WebBrowser控件,确保每次点击都使用有效引用:
Private Sub CommandButton23_Click() Me.MultiPage1.Pages(3).Controls("WebBrowser1").Navigate "https://www.msn.com" End Sub Private Sub CommandButton24_Click() Me.MultiPage1.Pages(3).Controls("WebBrowser1").Navigate "https://google.com" End Sub
注意:MultiPage的Pages索引从0开始,第4页对应索引
3;请根据你的MultiPage实际名称修改MultiPage1。
方案2:页面激活时重新初始化控件引用
添加MultiPage的Change事件,当切换回第4页时重新绑定控件引用,避免无效对象:
Private Sub MultiPage1_Change() ' 切换到第4页时(索引3) If Me.MultiPage1.Value = 3 Then Dim webCtrl As Object Set webCtrl = Me.MultiPage1.Pages(3).Controls("WebBrowser1") ' 可选:初始化导航到空白页,确保控件状态正常 webCtrl.Navigate "about:blank" End If End Sub
此方案需搭配方案1的按钮代码使用,确保引用始终有效。
内容的提问来源于stack exchange,提问作者Michael Riley
相关产品推荐
相关产品推荐

