分享成果,随喜正能量】修学务早,及其精专,习与性成,不异自然也。值得我们用一生去学习的,就是学习什么该做,什么不该做,在自己心中画个圈,干了出圈的事情,伤害的是自己。。
《VBA信息获取与处理》教程是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪贴板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。程序文件通过32位和64位两种OFFICE系统测试。是非常抽象的,更具研究的价值。
教程共两册,八十四讲。今日的内容是专题八“VBA与HTML文档”:表单对象的提交与反馈
HTML DOM 允许 JavaScript(脚本语言) 对 HTML 事件作出反应,当事件发生时,如当用户点击一个 HTML 元素时,可以执行 JavaScript。一般来讲这些事件包括:
用户点击鼠标时;网页已加载;图片已加载;鼠标移动到元素上;输入字段被改变;HTML 表单被提交;用户触发按键
在我的第五套教程《VBA中类的解读及应用》中我非常系统的讲解了事件的含义,事件主要是对象的响应,我们这节就几个实例给出几个对象的常用响应有的是事件本身,有的是相关的操作。
表单form对象,有一个方法比较重要,就是submit,这个方法提供了表单的提交的动作。如果我们捕捉页面的提交按钮非常困难时,有时候只要对表单,执行submit方法,表单也是可以提交的,不需去点击提交按钮。
表单控件,是文本输入类控件,最常用就是value的属性了,通过这个属性,可以往文本框里面添加文本。
单选框、复选框,常用的是checked属性,如果为true就是被选中了,或者直接使用click方法也行。
下拉列表,如果是单选列表框,可通过selectedIndex属性去设置选中项(下拉选项,从1开始编号,如2就是选择下拉列表的第二个选项),也可以通过value属性,直接把value指定为要选定的option的value即可,但多选列表框不可用这两个属性。另外,所有类别的列表框,都可以通过其内含对象集合options(),设置某个options(x)的selected属性为true,来设置选中项。
还是以百度首页为示例,我们用程序模拟键入查询数据“VBA代码解决方案”,然后提交查询,在网页中看看查询的结果:
Sub MYNZB() '在百度首页,提交表单
Dim ie, dmt, fm
Set ie = CreateObject("InternetExplorer.Application") '创建一个IE对象
With ie
.Visible = True '显示它
.navigate "http://www.baidu.com" '加载某个页面
Do Until .ReadyState = 4 '等待页面加载完毕
DoEvents
Loop
Set dmt = .document '将IE浏览器加载的页面文档,赋予dmt变量
Set fm = dmt.forms("f") '用表单的名称f,捕捉表单对象
dmt.all("kw").Value = "VBA代码解决方案" '用搜索栏的id"kw"捕捉它,并键入VBA代码解决方案
dmt.all.tags("input")(3).Click '用"百度一下"按钮的input索引号捕捉它,并模拟按钮的点击
'fm.submit '模拟表单的提交,不一定要click
End With
End Sub
代码截图:
网页返回的结果:
表格对象,也是我们提取网页数据,最常打交道的对象了。其内含rows对象集合,可以使我们访问表格内的每行,每个row对象还内含cells对象集合,使我们可以访问其每行的每个单元格,读取每个单元格的innertext属性即可获取我们所需每个单元格的文本。
另外,常用的属性还有length,这个类似我们VBA里面的count,都是返回某个对象的数量。
如下面代码是提取实时股票涨跌的代码:
Sub MYNZC()
Sheets("Sheet1").Select
Cells.Clear
Dim ie, dmt, tb, i&, j&
Set ie = CreateObject("InternetExplorer.Application") '创建一个IE对象
With ie
'.Visible = True '显示它
.navigate "http://vip.stock.finance.sina.com.cn/mkt/#hqIndex" '加载某个页面
Do Until .ReadyState = 4 '等待页面加载完毕
DoEvents
Loop
Set dmt = .document '将IE浏览器加载的页面文档,赋予dmt变量
Set tb = dmt.all.tags("table")(4) '通过索引号捕捉表格对象
For i = 0 To tb.Rows.Length - 1 '历遍其每个行
For j = 0 To tb.Rows(i).Cells.Length - 1 '历遍每行的每个单元格
Cells(i + 1, j + 1) = tb.Rows(i).Cells(j).innertext '将其innertext写入单元格
Next
Next
End With
End Sub
代码截图:
返回的结果:
为了提取网页中的图片,我们需要这个图片的链接,我们看看下面的代码:
Sub MYNZD()
Dim ie, dmt
Set ie = CreateObject("InternetExplorer.Application") '创建一个IE对象
With ie
.Visible = True '显示它
.navigate "https://baijiahao.baidu.com/s?id=1633425158454774294" '加载某个页面
Do Until .ReadyState = 4 '等待页面加载完毕
DoEvents
Loop
Set dmt = .document '将IE浏览器加载的页面文档,赋予dmt变量
Debug.Print dmt.images(1).src '读取图片的URL
End With
End Sub
代码截图:
文档中 <a> 标签每出现一次,就会创建 Anchor 对象。这个就没啥好示例的了,href属性返回被链接的URL,click可以模拟超链接被点击了。
这节涉及到的内容较多,希望大家在 的基础上修正代码加以使用。
本节知识点回向:
如何提交表单?如何下载图片的地址?如何获得表的数据?
本节参考文件:008工作表.xlsm
我20多年的VBA实践经验,全部浓缩在下面的各个教程中,教程学习顺序:
【分享成果,随喜正能量】在外的好脾气,是为人的圆滑,让你收获好人缘;在家的好脾气,是最贵的修养,让你你收获最好的幸福!。
一篇文章我们说了单选框、多选框以及下拉框的使用,今天呢我们继续看一下表单剩下的常用控件:提交按钮以及重置按钮。
提交按钮,顾名思义就是当我们填好了表单中的数据之后,我们需要通过提交按钮来将数据传递到后台的服务器中,供后台程序使用。
使用语法:<input type="submit" value="提交数据">
详细讲解:
1、type:只有当type值设置为submit时,按钮才有提交作用,才能正常的进行表单的提交。(或者使用JavaScript代码来触发提交事件,这个到后期我们讲解js的时候我进行介绍)
2、value:按钮上显示的文字,显示按钮的名称。
当用户需要重置表单信息到初始时的状态时,比如用户输入“用户名”后,发现书写有误,可以使用重置按钮使输入框恢复到初始状态。只需要把type设置为"reset"就可以。
使用语法:<input type="reset" value="重置数据">
详细讲解:
1、type:只有当type值设置为reset时,按钮才有重置作用,点击按钮会将form表单内的所有信息还原到初始未输入的状态。
2、value:按钮上显示的文字,显示重置按钮的名称
使用练习:
我们创建一个表单,数据我们以post的形式提交到百度首页,表单里边有姓名和年龄的输入框,并且添加提交数据按钮以及重置数据按钮。具体代码如下图所示:
在网页中的显示效果就如下图所示:
我们在姓名和年龄输入框中输入内容,点击重置数据既可以清空里边的内容,还原到初始状态,点击提交数据按钮,那么数据将会提交到我们的指定链接处。
以上呢就是表单最常用的一些控件了,接下来我们对学到的表单知识进行一次综合的测试,我们来写一个完整的表单包含我们学到的所有知识。
我们在这里就写一个网站制作常用的留言表,表格名称就叫留言表,然后表中包含有姓名输入框、性别单选框(默认选中男)、爱好多选框(默认选中第一个)、所在地区下拉框、留言内容多行文本框,以及提交信息按钮和重置信息按钮。数据提交呢我们还是提交到百度,提交类型我们使用post。具体的代码如下图所示:
在网页中的显示效果就如下图所示:
好了,到了这里我们的第一个表单就算是做完了,到这有人就会问了,为什么别人的代码在浏览器上看起来都是那么的规整,我这么写完看着怎么这么丑,接下来的文章我们将为大家介绍css的知识了,学习了css你也可以将你的页面做的高达上起来。最后大家看完一定要自己动手写一写,只有自己写出的代码才能体会到其中的乐趣,多加练习才是王道。
每日金句:人生最大的喜悦是每个人都说你做不到,你却完成它了!喜欢我的文章的小伙伴记得关注一下哦,每天将为你更新最新知识。
、使用场景:
安全性都一样,都是发送的http协议。安全性与提交文件的业务处理(格式检测,防注入)有关,与提交方式无关。
一般登录用表单提交,点击提交触发submit事件,一般会 使页面发生跳转,页面的跳转等行为的控制往往在后端,后端控制页面的跳转及数据的传递;但是某些时候不希望页面跳转,或者说想要将控制权放在前端,通过js来操作页面的跳转或数据变化,一般这种异步操作,都会使用ajax。
但是Ajax会有个隐藏的问题,即浏览器不保存密码,不符合用户习惯。理想的方式:建立隐藏的iframe,把form标签的target指向iframe,然后检测iframe的状态。
2、比较:
(1)ajax在提交、请求、接收时,都是异步进行,网页不需要刷新,只刷新页面局部,不关心也不影响页面其他部分的内容。
Form提交则是新建一个页面,哪怕是提交给自己本身的页面,也需要刷新,为了维持页面用户对表单的状态改变,要在控制器和模板之间传递更多参数以保持页面状态。
(2)ajax提交时,是在后台新建一个请求。
Form却是放弃本页面,然后再请求。
(3)ajax必须要用js来实现,存在调试麻烦、浏览器兼容问题,而且不启用js的浏览器,无法完成操作。
Form表单是浏览器自带的,无论是否开启js,都可以提交表单。
(4)ajax在提交、请求、接收时,整个过程都需要使用程序来对其进行数据处理。
Form表单提交,是根据表单结构自动完成,不需要代码干预。用submit提交。
3、其他方面:
关于输入内容的校验,ajax可以在获取到元素内容用程序判断;form表单的属性中有校验的字段,easyui,jeecg等中都封装,用户只需添加正则表达式的校验规则。
4、例:
(1)使用form提交
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>login test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div id="form-div">
<form id="form1" action="/users/login" method="post">
<p>用户名:<input name="userName" type="text" id="txtUserName" tabindex="1" size="15" value=""/></p>
<p>密 码:<input name="password" type="password" id="TextBox2" tabindex="2" size="16" value=""/></p>
<p><input type="submit" value="登录"> <input type="reset" value="重置"></p>
</form>
</div>
</body>
</html>
*请认真填写需求信息,我们会在24小时内与您取得联系。