整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

实战VBA技术也能实现网页浏览器

实战VBA技术也能实现网页浏览器

家好,上期的视频可能各位已经看了,感觉代码截图还是有点多,今天我以文章的形式将界面设计及其事件行为代码全部呈现给大家吧!

一、界面设计

(一)前端界面设计

图1 前端插入一个命令按钮

给这个按钮添加代码截图

图2 前端命令按钮代码

(二)后台窗体界面设计

1、窗体设计

图3 窗体

2、在窗体上添加转到按钮Go

图4 命令按钮Go

3、在窗体上添加主页按钮Home

图5 命令按钮Home

4、在窗体上添加后退按钮Back

图6 命令按钮Back

5、在窗体上添加前进按钮Forward

图7 命令按钮Forward

6、在窗体上添加刷新按钮Refresh

图8 命令按钮Refresh

7、在窗体上添加停止按钮Stop

图9 命令按钮Stop

8、在窗体上添加空白页按钮About:Blank

图10 命令按钮About:Blank

9、在窗体上添加网页html源代码显示按钮WebPagesHtmlSourceCode

图11 命令按钮WebPagesHtmlSourceCode

10、在窗体上添加图片控件Image1

图12图片控件Image1

11、在窗体上添加浏览器控件WebBrowser1

图13浏览器控件WebBrowser1

12、在窗体上添加状态栏控件StatusBar1

图14状态栏控件StatusBar1

二、功能代码实现

(一)模块1代码:

'在模块中声明私有变量ActiveTB变量为窗体MSForms中的文本框类型的

Private ActiveTB As MSForms.TextBox

'CreateShortCutMenu过程用来创建标题为"ShortCut"的右键快捷菜单,并添加4个菜单项

Public Sub CreateShortCutMenu()

Dim ShortCutMenu As CommandBar '定义ShortCutMenu快捷菜单变量为CommandBar命令栏类型

Dim ShortCutMenuItem As CommandBarButton '定义ShortCutMenuItem快捷菜单项变量

'为CommandBarButton命令栏按钮类型

Dim sCaption As Variant '定义sCaption菜单项标题变量为Variant可变类型(数组)

Dim iFaceId As Variant '定义iFaceId菜单项皮肤ID变量为Variant可变类型(数组)

Dim sAction As Variant '定义sAction菜单项动作名称变量为Variant可变类型(数组)

Dim i As Integer

'以下是初始化菜单项的属性数组sCaption、iFaceId、sAction

sCaption=Array("剪切(&C)", "复制(&T)", "贴粘(&P)", "删除(&D)")

iFaceId=Array(21, 19, 22, 1786)

sAction=Array("Action_Cut", "Action_Copy", "Action_Paste", "Action_Delete")

On Error Resume Next '遇到错误,则继续唤醒执行下一条语句

Application.CommandBars("ShortCut").Delete

Set ShortCutMenu=Application.CommandBars.Add("ShortCut", msoBarPopup)

With ShortCutMenu '对4个菜项单分别赋予属性:标题、皮肤ID、行为(动作)

For i=0 To 3

'设置快捷菜单项为控件类Controls的添加Add控件按钮msoControlButton事件

Set ShortCutMenuItem=.Controls.Add(msoControlButton)

With ShortCutMenuItem '4个菜项单分别赋予属性:标题、皮肤ID、行为(动作)

.Caption=sCaption(i)

.FaceId=Val(iFaceId(i))

.OnAction=sAction(i)

End With

Next

End With

End Sub

'ShowPopupMenu过程是根据文本框中字符的选中状态设置右键

'快捷菜单项的Enabled属性后使用ShowPopup方法显示右键快捷菜单

Public Sub ShowPopupMenu(txtCtr As MSForms.TextBox) 'txtCtr为窗体的文本控件类型

Set ActiveTB=txtCtr '用ActiveTB指向文本框对象txtCtr

With Application.CommandBars("ShortCut")

.Controls(1).Enabled=txtCtr.SelLength > 0 '如果当前文本框中已有选中的字符则"剪切"按钮有效

.Controls(2).Enabled=.Controls(1).Enabled '如果当前文本框中已有选中的字符则"复制"按钮有效

.Controls(3).Enabled=txtCtr.CanPaste '如果剪贴板中包含对象支持的数据。则"贴粘"按钮有效

.Controls(4).Enabled=.Controls(1).Enabled '如果当前文本框中已有选中的字符则"删除"按钮有效

.ShowPopup '显示快捷菜单

End With

End Sub

'是快捷菜单中单击"剪切"菜单项所运行的过程。使用Cut 方法将当前选中的文本框中的文本删除并移至剪贴板

Public Sub Action_Cut()

ActiveTB.Cut

End Sub

'是快捷菜单中单击"复制"菜单项所运行的过程。使用Copy方法将文本框选中的文本复制到剪贴板上

Public Sub Action_Copy()

ActiveTB.Copy

End Sub

'是快捷菜单中单击"贴粘"菜单项所运行的过程。使用Paste方法把剪贴板上的内容传送到一个文本框中

Public Sub Action_Paste()

ActiveTB.Paste

End Sub

'是快捷菜单中单击"贴粘"菜单项所运行的过程。使用Replace函数将文本框中选中的文本的文本替换成空字符

Public Sub Action_Delete()

Dim s As String

With ActiveTB

s=.SelText

.Value=Replace(.Value, s, "")

End With

End Sub

'删除创建的右键快捷菜单

Public Sub DeleteShortCutMenu()

On Error Resume Next

Application.CommandBars("ShortCut").Delete

End Sub

(二)窗体代码:

'定义strURL为公有的网址变量用于中间传递网址,s为保存访问当前网页源代码字符串变量

'另外定义firstURL, lastURL, URL_Array(500)是网页首址、尾址,地址数组

Dim strURL, s, firstURL, lastURL, URL_Array(500) As String

Dim clc_URL As New Collection '定义clc_URL为地址集合(具有地址重复的排他性,即不重复)

Dim i As Integer '定义i为地址数组URL_Array( )元素下标,可以在任意过程中使用

'以下是恢复VBA窗体应有的最小化、最大化按钮

Option Explicit

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

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

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Const GWL_STYLE=(-16)

Private Const WS_THICKFRAME As Long=&H40000 '(恢复大小)

Private Const WS_MINIMIZEBOX As Long=&H20000 '(最小化)

Private Const WS_MAXIMIZEBOX As Long=&H10000 '(最大化)

Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Private Const WM_SYSCOMMAND=&H112

Private Const SC_MAXIMIZE=&HF030&

Private Sub UserForm_Initialize()

Call userform1_max_min_Btn_display '重构窗体的最大化最小化按钮显示

WebBrowser1.Silent=True '避免出现脚本错误,设置浏览器控件为安静状态Silent=True

i=0 '初始化地址数组URL_Array( )下标为0

'TextBox1.SetFocus '窗体初始化时可设地址栏输入框TextBox1为起始输入焦点,即光标初始出现在地址栏输入框TextBox1

End Sub

'窗体尺寸改变事件

Private Sub UserForm_Resize() '文本框、浏览器视图区随窗体变化而变化

TextBox1.Width=UserForm1.Width - TextBox1.Left - 60

GoBtn.Left=TextBox1.Left + TextBox1.Width + 4

If UserForm1.Height - WebBrowser1.Top - 50 < 0 Then '若窗体最小化导致

WebBrowser1.Height=0 '致UserForm1.Height - WebBrowser1.Top - 50 < 0

'则重置浏览器控件高度WebBrowser1.Height为0

Else '否则按照正常的尺寸跟随改变

WebBrowser1.Width=UserForm1.Width - WebBrowser1.Left - 20

WebBrowser1.Height=UserForm1.Height - WebBrowser1.Top - 50

End If

'构筑图形Image1作为WebBrowser1的边框背景,设置其Left、Top、Width、Height属性跟随WebBrowser1变化

Image1.Left=WebBrowser1.Left - 2

Image1.Top=WebBrowser1.Top - 2

Image1.Width=WebBrowser1.Width + 5

Image1.Height=WebBrowser1.Height + 5

'构筑状态栏StatusBar1,设置其属性,其中Panels(1)是第一个面板

StatusBar1.Top=WebBrowser1.Top + WebBrowser1.Height + 3

StatusBar1.Width=WebBrowser1.Width

StatusBar1.Panels(1).Width=StatusBar1.Width - 2

End Sub

'以下是当TextBox1输入内容完成回车离开后将刚才输入的内容传送到浏览器控件

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

WebBrowser1.Navigate (TextBox1.Text) '浏览器导航网址进入页面

If TextBox1.Text="" Then

BackBtn.Enabled=False

ForwardBtn.Enabled=False

Else

BackBtn.Enabled=True

ForwardBtn.Enabled=True

End If

s=""

End Sub

'文本框的右键菜单事件

Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

Call CreateShortCutMenu '动态创建快捷菜单

'若点击了鼠标上面的第2个键即右键

If Button=2 Then ShowPopupMenu ActiveControl '若点击鼠标右键(即第2键),调用过程

'ShowPopupMenu ActiveControl显示弹出的

'快捷菜单,其中ActiveControl为活动控件

End Sub

Private Sub GoBtn_Click() 'Go转向按钮的的转向事件

WebBrowser1.Navigate (TextBox1.Text) '浏览器导航网址进入页面

If TextBox1.Text="" Then

BackBtn.Enabled=False

ForwardBtn.Enabled=False

Else

BackBtn.Enabled=True

ForwardBtn.Enabled=True

End If

s=""

End Sub

'页面标题进行动态修改窗体标题过程

Sub Page_Title()

Dim start_pos, end_pos As Integer

Dim title As String

If TextBox1.Value <> "" And TextBox1.Value <> "about:blank" Then '若地址收入栏非空且也不为空白页

s="" '当点击源码查看按钮WebPagesHtmlSourceCodeBtn时,s源码字符串置空

's获取最新访问的网页的源码(用WebBrowser1.Document.DocumentElement.innerHTML轻易实现)

s=s & WebBrowser1.Document.DocumentElement.innerHTML

s=UCase(s) '将s中的小写字符统统变为大写,这里用了UCase(s)函数

start_pos=Val(InStr(s, "<TITLE>")) + 7

end_pos=Val(InStr(s, "</TITLE>"))

title=Mid(s, start_pos, end_pos - start_pos)

UserForm1.Caption="WebBrowser-" & title

Else

UserForm1.Caption="WebBrowser"

End If

End Sub

'当新网页文档内容完全加载完时,调用页面标题进行动态修改窗体标题事件

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)

Call Page_Title '网页文档加载完后调用网页标题去修改窗体标题功能

Call userform1_max_min_Btn_display '恢复最大化、最小化按钮显示

End Sub

'浏览器控件在新导航NavigateComplete2页面完成后触发的事件

Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, URL As Variant)

'以下是将新页面的网址送达文本框TextBox1

TextBox1.Value=WebBrowser1.LocationURL

'状态栏第一个面板StatusBar1.Panels(1)同步获取网址信息

StatusBar1.Panels(1).Text=WebBrowser1.LocationURL

Dim X As String

On Error Resume Next

X=TextBox1.Value

clc_URL.Add X, CStr(X) '新导航网址后,将新导航的网页地址存入集合clc_URL

If Err=0 Then '若果错误为0即不重复

URL_Array(i)=X '将不重复的地址传送到地址素组URL_Array( ),且下面进行i递增1

i=i + 1

End If

Err.Clear '若有错,则清除错误

On Error GoTo 0

BackBtn.Enabled=True

ForwardBtn.Enabled=True

End Sub

'浏览器控件当准备产生新窗口时

Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean)

Cancel=True '终止在新窗口产生网页为真

WebBrowser1.Navigate strURL '浏览器控件网址导航网址为中间传递的网址变量strURL

s="" '当新网页欲想在新窗口中呈现时,重新先将s置空

End Sub

'浏览器控件状态文本改变时(即 活动网页中点击了的文本--超链接对象),将超链接的文本链接信息Text传递到

'中间传递的网址变量strURL

Private Sub WebBrowser1_StatusTextChange(ByVal Text As String)

strURL=Text

End Sub

Private Sub HomeBtn_Click() '回到主页

WebBrowser1.GoHome

End Sub

Private Sub BackBtn_Click() '页面后退

firstURL=URL_Array(0) '获取地址数组存放网页的首址

'若地址栏为空,或者地址栏为空白,或者地址栏是网页的首址

If TextBox1.Value="" Or TextBox1.Value="about:blank" Or TextBox1.Value=firstURL Then

MsgBox "No site display or arrived at first site address!"

BackBtn.Enabled=False

Else

WebBrowser1.GoBack

ForwardBtn.Enabled=True

End If

End Sub

Private Sub ForwardBtn_Click() '页面前进

If TextBox1.Value="" Then

lastURL=URL_Array(0)

MsgBox "No site display or arrived at last site address!!"

ForwardBtn.Enabled=False

Else

lastURL=URL_Array(clc_URL.Count - 1) '获取地址数组存放网页跳转的当前尾址

'若地址栏为空白,或者地址栏是网页跳转的最终当前尾址

If TextBox1.Value="about:blank" Or TextBox1.Value=lastURL Then

MsgBox "No site display or arrived at last site address!!"

ForwardBtn.Enabled=False

Else

WebBrowser1.GoForward

BackBtn.Enabled=True

End If

End If

End Sub

Private Sub RefreshBtn_Click() '刷新页面

If TextBox1.Value="" Then '如果地址栏输入框TextBox1为空

BackBtn.Enabled=True '则恢复后退BackBtn、前进ForwardBtn按钮可用,且不刷新页面

ForwardBtn.Enabled=True

Else '否则,刷新页面,并且调用过程Page_Title更改窗体标题

WebBrowser1.Refresh

Call Page_Title '刷新后调用网页标题去修改窗体标题功能

Call userform1_max_min_Btn_display '恢复最大化、最小化按钮显示

End If

End Sub

Private Sub StopBtn_Click() '页面停止

WebBrowser1.Stop

End Sub

'以下是窗体上相对浏览器控件WebBrowser1的几个控制按钮的事件

Private Sub About_Blank_Btn_Click() '设置空白页

WebBrowser1.Navigate "about:blank"

End Sub

Private Sub WebPagesHtmlSourceCodeBtn_Click() '查看访问当前网页的HTML源码

If TextBox1.Value <> "" Then '若地址收入栏非空

s="" '当点击源码查看按钮WebPagesHtmlSourceCodeBtn时,s源码字符串置空

's获取最新访问的网页的源码(用WebBrowser1.Document.DocumentElement.innerHTML轻易实现)

s=s & WebBrowser1.Document.DocumentElement.innerHTML

Else

s="No Web Pages!"

End If

MsgBox s

End Sub

Sub userform1_max_min_Btn_display() '窗体的最大化最小化按钮显示

Dim hWndForm As Long

Dim IStyle As Long

hWndForm=FindWindow("ThunderDFrame", Me.Caption)

IStyle=GetWindowLong(hWndForm, GWL_STYLE)

IStyle=IStyle Or WS_THICKFRAME '还原

IStyle=IStyle Or WS_MINIMIZEBOX '最小化

IStyle=IStyle Or WS_MAXIMIZEBOX '最大化

SetWindowLong hWndForm, GWL_STYLE, IStyle

PostMessage hWndForm, WM_SYSCOMMAND, SC_MAXIMIZE, 0 '使其窗口最大化

End Sub

三、浏览器运行测试效果截图

(一)在浏览器地址栏输入电子科技大学网址

图15 电子科大主页面

(二)电子科技大学历史页面

图16 电子科大历史介绍

(三)浏览器地址栏输入成都农业科技职业学院网址的页面

图17 成农院主页

(四)点击成都农业科技职业学院站群导航准备进入信息技术分院

图18 成农院站群到导航

(五)点击成都农业科技职业学院站群导航进入信息技术分院

图19 成农院信息分院页面

(六)点击Home按钮回到浏览器空白主页

图20 回到空白主页

好了,我终于分享给大家了全部的设计过程,各位可以可圈可点,可以在这个基础上进行改进开发,比如设计选项卡式的面板、站点收藏、历史纪录等等功能。

最后,还是感谢大家的关注(头条号“跟我学office高级办公”)和点评哦!

+

ebBrowser控件是Internet Explorer的主窗口,它是作为一个ActiveX控件来包装的。用户可以使用WebBrowser控件打开任何IE能够显示的Web页面,并提取页面数据。如有自己的网站,可运用WebBrowser控件实现EXCEL文档和服务器间数据交换

WebBrowser控件是作为一个ActiveX控件来包装的,通常运用在VBA标准控件可满足大多数应用程序的需求,为了进一步扩展VBA功能,可在应用程序中使用ActiveX控件。ActiveX控件是为用户进行程序设计所定制的可重用对象,可以极大地扩展VBA的使用范围。

1、添加WebBrowser控件到工具箱

ActiveX控件是可选控件,它可以被添加到【工具箱】中并在窗体中使用。在默认情况下,【工具箱】将只显示标准控件,向【工具箱】添加WebBrowser控件的步骤如下:

  • 第一步、鼠标右击【工具箱】空白处,弹出下面的菜单如图:

  • 第二步、单击【附加控件】菜单,打开【附加控件】对话框如图:

  • 第三步、下拉滚动条,在【可用控件】列表中单击所需的ActiveX控件,如Microsoft Web Browser浏览器控件,【工具箱】中显示该控件如图:

2、WebBrowser控件常用属性、事件和方法

I、WebBrowser控件常用属性

  • Application:返回WebBrowser控件的自动化对象;
  • MaxLength:设置文字框中能够输入字符的最大数量。默认为0,表示输入字符没有数量限制;
  • MultiLine:设置文字框能否接受和显示多行文本。属性值为True显示多行文本,False只容纳单行文本;
  • PasswordChar:导航发生前激发,刷新时不激发;
  • ScrollBars:设置文字框是否有垂直或水平滚动条;
  • Text:设置或返回文字框中内容,与Value属性相同。

II、WebBrowser控件常用事件

  • DocumentComplete:当整个文档完成时激发,刷新页面不激发;
  • DownloadBegin:当某项下载操作已经开始后激发,刷新也可激发此事件;
  • DownloadComplete:当某项下载操作已经完成后激发,刷新也可激发此事件;
  • BeforeNavigate2:导航发生前激发,刷新时不激发;
  • NavigateComplete2:导航完成后激发,刷新时不激发。

III、WebBrowser控件常用方法

  • GoBack:相当于IE的【后退】按钮,使你在当前历史列表中后退一项;
  • GoForward:相当于IE的【前进】按钮,使你在当前历史列表中前进一项;
  • GoHome:相当于IE的“ 主页 ”按钮,连接用户默认的主页;
  • Navigate:连接到指定的URL;
  • Refresh:刷新当前页面。

3、WebBrowser控件动态建立网页

如前所述,工具箱中添加WebBrowser控件后,将其拖入窗体并设置适当尺寸,如图:

在窗体Initialize事件编写代码如下:

Private Sub UserForm_Initialize()
WebBrowser1.Navigate ("about:blank")
WebBrowser1.Document.Clear
WebBrowser1.Document.Open
WebBrowser1.Document.write ("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>")
WebBrowser1.Document.write ("<html>")
WebBrowser1.Document.write ("<head>")
WebBrowser1.Document.write ("<title>WebBrowser控件建立动态网页</title>")
WebBrowser1.Document.write ("<meta charset='utf-8'/>")
WebBrowser1.Document.write ("<style>")
WebBrowser1.Document.write ("</style>")
WebBrowser1.Document.write ("<script type='text/javascript'>")
WebBrowser1.Document.write ("</script>")
WebBrowser1.Document.write ("</head>")
WebBrowser1.Document.write ("<body scroll='no' bgcolor='#E3F3F9' style='border:none;'>")
WebBrowser1.Document.write ("<form name='myFc'>")
WebBrowser1.Document.write ("<table>")
WebBrowser1.Document.write ("<tr><th colspan=2 style='text-align:left; font-size:10pt; color:#a51020;'>1、文本框</th></tr>")
WebBrowser1.Document.write ("<tr><td>  姓名:</td><td>")
WebBrowser1.Document.write ("<input id='myName' style='width:100px; color:#ff0000;' value='张三'/></td></tr>")
WebBrowser1.Document.write ("<tr><th colspan=2 style='text-align:left; font-size:10pt; color:#e51020;'>2、单选按钮</th></tr>")
WebBrowser1.Document.write ("<tr><td>  性别:</td><td>")
WebBrowser1.Document.write ("<input type='radio' name='myGender' value='1' checked/>男 ")
WebBrowser1.Document.write ("<input type='radio' name='myGender' value='0'/>女</td></tr>")
WebBrowser1.Document.write ("<tr><td>  简介:</td><td>")
WebBrowser1.Document.write ("<textarea id='myIntroduction' style='width:360px; height:160px; color:#555555;'>")
WebBrowser1.Document.write ("WebBrowser控件是Internet Explorer的主窗口,它是作为一个ActiveX控件来包装的。")
WebBrowser1.Document.write ("用户可以使用WebBrowser控件打开任何IE能够显示的Web页面,")
WebBrowser1.Document.write ("并提取页面数据?如有自己的网站,可运用WebBrowser控件实现EXCEL文档和服务器间数据交换")
WebBrowser1.Document.write ("</textarea></td></tr>")
WebBrowser1.Document.write ("</table>")
WebBrowser1.Document.write ("</form>")
WebBrowser1.Document.write ("</body>")
WebBrowser1.Document.write ("</html>")
WebBrowser1.Document.Close
End Sub

注:窗体中添加WebBrowser控件,在窗体初始化事件Initialize中编写代码,主要通过WebBrowser控件write方法将HTML文档写入空白文档

窗体运行效果如图:

4、WebBrowser控件获取网页信息

WebBrowser控件和网页交互使用需要一定程度的网页编程技术,网页基本框架由超文本标记语言(Hyper Text Markup Language,HTML)搭建,网页外观由层叠样式表(Cascading Style Sheets,CSS)和一些HTML标签属性来修饰完成,网页动态效果通常使用JavaScript脚本语言来实现。HTML、CSS和JavaScript(JS)技术构成客户端(前端)网页编程三大基础,运用WebBrowser控件和网页交换需要掌握HTML、CSS和JS基本知识。

如果有自己的网站,具备服务器端(后端)编程技能,还可以通过WebBrowser控件专门制作和EXCEL对接的网页,从而将强的的网页功能导入EXCEL中。

运用WebBrowser控件和网页交换需要了解网页文档结构和内容,如网页excelVBA.html文档如下:

【HTML文档(http://www.galaxystatistics.com/excel/excelVBA.html)】

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Excel Train
<meta charset="utf-8"/>
<style></style>
 <script type="text/javascript">
function oSum(x,y) {return x+y;}
//无参数调用  
function alertNull(){alert("WebBrowser call!");  }
//有参数调用  
function callWithPar(name, address) {  
alert("Name is " + name + "; address is " + address);  
}  
</script>
</head>
<body scroll="yes" bgcolor="#E3F3F9" style="border:none">
<form name="myFc">
<table>
<tr><th colspan=2 style="text-align:left; font-size:10pt; color:#a51020;">1、文本框</th></tr>
<tr><td>  姓名:</td>
<td><input id="myName" style="width:100px; color:#ff0000;" value="张三"/></td></tr>
<tr><th colspan=2 style="text-align:left; font-size:10pt; color:#e51020;">2、单选按钮</th></tr>
<tr><td>  性别:</td><td>
<input type="radio" name="myGender" value="1" checked/>男 
<input type="radio" name="myGender" value="0"/>女</td></tr>
<tr><th colspan=2 style="text-align:left; font-size:10pt; color:#e51020;">3、复选框</th></tr>
<tr><td>  爱好:</td><td>
<input type="checkbox" name="myLike" value="1"/>篮球 
<input type="checkbox" name="myLike" value="2"/>游泳 
<input type="checkbox" name="myLike" value="3"/>跑步</td></tr>
<tr><th colspan=2 style="text-align:left; font-size:10pt; color:#e51020;">4、下拉列表</th></tr>
<tr><td>  专业:</td><td><select id="myMajor">
    <option value="1">数学</option>
    <option value="2">统计学</option>
    <ption value="3">寿险精算</option>
    <option value="4">R语言</option>
</select></td></tr>
<tr><th colspan=2 style="text-align:left; font-size:10pt; color:#e51020;">5、多行文本</th></tr>
<tr><td>  简介:</td><td>
<textarea id="myIntroduction" style="width:300px; height:100px; color:#555555;">
WebBrowser控件是Internet Explorer的主窗口,它是作为一个ActiveX控件来包装的。
用户可以使用WebBrowser控件打开任何IE能够显示的Web页面,并提取页面数据。
如有自己的网站,可运用WebBrowser控件实现EXCEL文档和服务器间数据交换
</textarea></td></tr>
<tr><th colspan=2 style="text-align:left; font-size:10pt; color:#e51020;">6、DIV区块</th></tr>
<tr><td>  效果:</td><td>
<div id="myEffect" style="width:300px; height:50px; border:#aaaaaa 1px solid; dsiplay:inline;">
<b style="text-align:center; width:100%; padding-top:15px;">这是黑体效果</b>
</div></td></tr>
<tr><th colspan=2 style="text-align:left; font-size:10pt; color:#e51020;">7、图片</th></tr>
<tr><td>  头像:</td><td>
<img src="http://studio.galaxystatistics.com/shiny/rSHIndex/pic/vba1.jpg" id="myImg" style="width:200px; height:260px; color:#ff0000;"/>
</td></tr>
<tr><th colspan=2 style="text-align:left; font-size:10pt; color:#e51020;">8、内崁iFrame框架</th></tr>
<tr><td>  框架:</td>
<td><iframe src="http://www.galaxystatistics.com/excel/excelVBA1.html" id="myIframe" style="width:380px; height:260px; color:#ff0000;"/></td></tr>
</table>
</form>
</body>
</html>

网页excelVBA.html涉及HTML文档的常用标签,通过WebBrowser控件和指定网页互动包括获取或设置网页标签的值(文本)或属性值,调用网页JS函数等"。

通常在EXCEL VBA中通过WebBrowser控件打开网页时,窗体中的WebBrowser控件显示网页时会有立体边框出现。为了去除这一边框,可在网页复制开始第1行定义文档类型代码,同时复制在25行的BODY标签属性style="border:none"。

根据网页excelVBA.html内容,在窗体【获取网页信息】命令按钮的Click事件中输入如下代码:

Private Sub CommandButton1_Click()
Dim doc As Object
Dim id As Integer
'打开指定网页
WebBrowser1.Navigate "http://www.galaxystatistics.com/excel/excelVBA.html"
Set doc=WebBrowser1.Document
MsgBox "文本框信息:" & doc.getElementById("myName").Value
MsgBox "单选按钮数量:" & doc.getElementById("myFc").myGender.Length
MsgBox "单选按钮选项value属性:" & doc.getElementById("myFc").myGender(0).Value
MsgBox "单选按钮选项checked属性:" & doc.getElementById("myFc").myGender(0).Checked
MsgBox "复选框数量:" & doc.getElementById("myFc").myLike.Length
MsgBox "复选框选项value属性:" & doc.getElementById("myFc").myLike(0).Value
MsgBox "复选框选项checked属性:" & doc.getElementById("myFc").myLike(0).Checked
MsgBox "下拉列表数量:" & doc.getElementById("myMajor").Options.Length
MsgBox "下拉列表索引:" & doc.getElementById("myMajor").selectedIndex
id=doc.getElementById("myMajor").selectedIndex
MsgBox "下拉列表选中文本:" & doc.getElementById("myMajor").Options(id).Text
MsgBox "下拉列表选中值:" & doc.getElementById("myMajor").Options(id).Value
MsgBox "多行文本内容:" & doc.getElementById("myIntroduction").Value
MsgBox "DIV区块文本:" & doc.getElementById("myEffect").innerText
MsgBox "DIV区块HTML:" & doc.getElementById("myEffect").innerHTML
MsgBox "图片路径:" & doc.getElementById("myImg").getAttribute("SRC")
MsgBox "图片宽度:" & doc.getElementById("myImg").Style.Width
Dim doc1 As Object
Set doc1=WebBrowser1.Document.getElementById("myIframe").Document    '设置框架文档对象
MsgBox "框架文本框信息:" & doc1.getElementById("myName").Value
End Sub

注:代码中设置网页文本对象为doc,对于网页标签内容的提取基本按DOM文档结构解析。

运行窗体,点击【获取网页信息】命令按钮,结果如下图:

在VBA环境中通过WebBrowser控件提取网页信息,通常将代码编写在WebBrowser控件的DocumentComplete事件中,即当整个文档完成时触发该事件,这时网页文档加载完毕,可保证提取到完整信息。样例代码如下:

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Application.StatusBar="网页文档下载完毕!"      '在状态栏中输入提示信息
Dim doc As Object
Set doc=WebBrowser1.Document
End Sub

注:DocumentComplete确保WebBrowser下载完成网页文档后,通过文档Document对象可提取网页标签信息

6、WebBrowser控件调用网页JS函数

根据网页excelVBA.html内容,在窗体【调用网页JS函数】命令按钮的Click事件中输入如下代码:

Private Sub CommandButton2_Click()
'调用网页中无参JavaScript函数alertNull
WebBrowser1.Document.parentwindow.execScript "alertNull()", "JavaScript"
'调用网页中有参JavaScript函数callWithPar
WebBrowser1.Document.parentwindow.execScript "callWithPar('银河统计工作室','哈尔滨')", "JavaScript"
MsgBox WebBrowser1.Document.Script.oSum(25, 75)    '调用JS函数返回值
End Sub

注:代码中调用的JS函数在网页文本script标签之间。注意,打开对应网页后再运行【调用网页JS函数】命令按钮

运行窗体,点击【调用网页JS函数】命令按钮,结果如下图:

本文我们创建了一个InternetExplorer对象并设置了一些属性。然后,使用.navigate方法打开网页,并使用.document.parentWindow.execScript方法执行了一个简单的JavaScript代码。

请注意,使用InternetExplorer对象加载和执行JavaScript代码需要将"Microsoft Internet Controls"引用添加到你的VBA项目中。你可以在VBA编辑器的"工具"菜单中的"引用"对话框中勾选该引用。

在VBA中,除了InternetExplorer对象,还可以使用其他浏览器对象来加载和操作Web页面中的JavaScript代码。

  • Chrome浏览器对象:可以使用Chrome浏览器的COM接口(Chrome COM Interface)来在VBA中加载和操作Chrome浏览器中的JavaScript代码。这需要先安装Chrome浏览器COM接口,然后通过创建Chrome浏览器对象来实现。示例代码:
Sub RunJavaScriptInChrome()
    Dim Chrome As Object
    ' 创建 Chrome 浏览器对象
    Set Chrome=CreateObject("ChromeTab.ChromeBrowser")
    ' 打开指定网址
    Chrome.navigate "http://www.example.com"
    ' 等待加载完毕
    Do While Chrome.Busy Or Chrome.readyState <> 4
        DoEvents
    Loop
    ' 执行 JavaScript 代码
    Chrome.ExecuteScript "alert('Hello, JavaScript in Chrome!');"
    ' 关闭 Chrome 浏览器对象
    Chrome.Quit
    ' 释放对象引用
    Set Chrome=Nothing
End Sub

Firefox浏览器对象:类似地,也可以使用Firefox浏览器的COM接口来在VBA中加载和操作Firefox浏览器中的JavaScript代码。这同样需要先安装Firefox浏览器COM接口,并通过创建Firefox浏览器对象来实现。以下是一个示例代码:

Sub RunJavaScriptInFirefox()
    Dim Firefox As Object
    ' 创建 Firefox 浏览器对象
    Set Firefox=CreateObject("Mozilla.Browser")
    ' 打开指定网址
    Firefox.navigate "http://www.example.com"
    ' 等待加载完毕
    Do While Firefox.Busy Or Firefox.readyState <> 4
        DoEvents
    Loop
    ' 执行 JavaScript 代码
    Firefox.ExecuteScript "alert('Hello, JavaScript in Firefox!');"
    ' 关闭 Firefox 浏览器对象
    Firefox.Quit
    ' 释放对象引用
    Set Firefox=Nothing
End Sub

使用WebBrowser控件按网址打开服务器端网页后,即建立起EXCEL和网页HTML文档的数据交换通道,实现在VBA中操控网页、自动抓取信息等功能。

试网站和 Web 应用程序的移动响应能力是每个 Web 设计师和开发人员必须处理得最令人沮丧的任务之一。

它通常涉及聘请昂贵的代理商和购买订阅计划。但现在也有更实惠的解决方案,比如 LT 浏览器。

LT Browser是一款专为设计人员和开发人员设计的新型浏览器,可用于在 50 多种移动设备上测试网站。而且它是免费使用的!

我们仔细研究了这个伟大的新工具,看看它如何在网站开发的移动测试阶段受益。让我们看看这个浏览器能够提供什么。

什么是 LT 浏览器?

LT Browser 由 LambdaTest 开发,是一款专门测试网站响应能力的新型浏览器。它包括 50 多个流行移动设备的视口,让您只需点击几下即可立即测试移动网站。

与为开发人员打造的其他浏览器不同,LT Browser 专注于解决 Web 开发过程中的一个,也是最大的问题之一——移动测试。它提供了测试网站和 Web 应用程序的响应能力、调试甚至获取性能报告所需的所有工具,所有这些都集中在一处。

为什么要使用 LT 浏览器?

全球移动互联网用户超过43.2亿。移动用户占互联网总流量的 54% 以上。

无论您是在简单网站上工作的自由设计师,还是在大型网络应用程序上工作的团队,LT Browser 都提供了一组宝贵的工具。

毋庸置疑,移动平台现在是几乎所有 Web 开发人员和设计人员的主要关注点。但它也是最具挑战性的平台。为桌面和移动平台开发之间仍然存在很大差距。缺乏可用于移动可用性测试和响应性测试的工具是问题的主要部分。

多亏了 LT Browser 之类的工具,这个问题很快就会不存在。在 LT 浏览器的帮助下,您将不再需要求助于昂贵的工具或聘请代理来移动测试您的网站和网络应用程序。

无论您是在简单网站上工作的自由设计师,还是在大型网络应用程序上工作的团队,LT 浏览器都提供了一组宝贵的工具来解决开发适合移动设备的网站的一些最大问题。

主要特点

LT 浏览器就像任何其他浏览器一样工作。它与 Windows、macOS 甚至 Ubuntu 兼容。您可以下载并安装桌面应用程序并创建一个免费的 LambaTest 帐户已开始使用。

乍一看,LT Browser 似乎是一个简单的浏览器。但它包含了很多很棒的功能。以下是它的一些最佳功能。

在 50 多个设备上进行测试

使用 LT 浏览器,您可以在 50 多种不同的设备视口上测试网站和 Web 应用程序。其中包括支持从 iPhone 到三星 Galaxy 标签、MacBook 以及介于两者之间的所有设备的移动设备、平板电脑和桌面设备。它甚至可以让您同时在两台设备上查看网站。

如果在列表中找不到设备,也可以轻松创建自定义移动或桌面视口。设置新视口非常容易。

即时调试

LT Browser 最酷的功能之一是它的 DevTools 控制台,它支持实时调试。如果您在网站测试中遇到问题,您可以快速切换到调试模式并找到解决方案。

LT 浏览器中的 DevTools 还支持热重载,这意味着您在调试模式下对代码所做的任何更改都将在移动视口中实时预览。

这使您可以立即看到所做的更改。对于开发人员进行调试以及设计人员进行不同设计选择的试验,这是一项非常有价值的功能。

录制视频和截图

在网站中发现了您想与团队讨论的问题?或者想向其他团队成员请求新功能?然后,您可以直接从 LT 浏览器轻松抓取屏幕截图或录制视频剪辑,以与您的团队或客户分享。

您捕获的所有视频剪辑和屏幕截图都将整齐地存储在浏览器的“媒体”部分,因此您无需在计算机硬盘驱动器中搜索它们。

网络节流

并非世界上的每个人都拥有超快的互联网连接。大多数移动用户仍在以 3G 速度浏览网页。

使用 LT Browser,您可以对网络进行节流,以体验不同网络条件下的网站性能。这对于查看您的网站性能如何、加载页面需要多长时间以及动画交互在慢速互联网条件下如何工作非常有用。

即时错误报告

有许多肉眼看不到的错误和问题。但是,您不必扫描数百行代码来查找您的网站出了什么问题。LT 浏览器具有快速错误报告功能,可提供您网站上发现的最大问题的详细摘要。

Google Lighthouse 性能报告

如果您想查看您的网站在 Google Lighthouse 测试中的表现如何,只需单击一下即可。LT 浏览器包含一个由 Google Lighthouse 提供支持的性能测试选项,可为您提供有关网站性能不同方面的详细报告。

它还将对需要改进的网站领域提供建议和建议。

第三方应用程序集成

LT Browser 还支持数十种第三方应用程序集成,包括 Slack 和 Asana。这样可以更轻松地跟踪错误和报告问题。

例如,您可以从 LT Browser 抓取屏幕截图,将其标记为错误,然后直接从浏览器将其分配给团队中的某个人查看。

它要多少钱?

LT Browser 完全免费使用,没有任何限制。该浏览器作为 LambdaTest 跨浏览器测试平台的一部分提供。

如果您想将移动测试提升到一个新的水平,您可以利用 Lambdatest 云平台中提供的许多其他工具,包括自动化测试、模拟器上的本机应用程序测试等。

Lambatest 有一个免费计划和高级计划,每月 15 美元起。

结论

LT Browser 是网页设计师和开发者必备的工具。在移动测试网站和 Web 应用程序方面,它为您提供了难以置信的价值。

试一下,亲自看看它的功能,你肯定会喜欢的。