首页 Excel 正文
1806

vba实现http远程请求数据

  • yiqingpeng
  • 2019-01-01
  • 0
  •  
有一份Excel报表,里面有1w多条数据,并且有一列是IP地址,老板说,把每一行的IP对应的中文地址信息找出来。OMG,这怎么办???
琢磨了一下,整理了思路:操作excel数据最好的方法->vba->vba通过给定的ip地址向远程请求地址信息->将远程返回的地址写入到excel表。

最难的环节就是如何用vba实现http请求??只要这个问题解决了,一切都好说。

百度了一个ip接口(有道ip地址反查接口:
http://www.yodao.com/smartresult-xml/search.s?jsFlag=true&keyfrom=163.com&event=fYodaoCallBack&type=ip&q=123.233.157.9),试了一下,不错,速度挺快的,返回的数据也很简练(fYodaoCallBack(1, {'product':'ip','ip':'123.233.157.9','location':'山东省济南市'} , '');),很明显返回的数据是用js回调方式传入json数据。 好吧,等下只好用vba中的正则表达式来获得location字段的值了,如果vba能调用到js的话获取location字段的值就更方便了,谁让vba没有解析json对象的功能呢?这里先不提,都是后话,能不能实现数据的请求还要看下面的努力啊。

 在网上一阵乱搜,发现如果在vba中引用internet transfer control的话就可以调用 openUrl()向远程请求数据了。好吧,打开vba编辑器,插入一个form窗口,选择工具菜单->附加控件,在里面找了半天没有这个控件,太让我沮丧了。为什么会没有这个控件呢,想了很久,何不百度一下呢?

在百度上又搜了很久,发现了一点有用的信息,因为没有安装vb6开发环境,所以没有MSWINSCK.OCX与MSINET.OCX两个控件,需要手动增加这两个控件,于是在网上下载了这两个东东,将它们copy到windows\system32目录下,然后打开运行框,输入 Regsvr32 MSWINSCK.OCX,提示成功,太好了,接着再来Regsvr32 MSINET.OCX,也成功了,太顺利了,这样一来,两个控件都成功注册到了系统里面。(题外话:反注册:regsvr32 \u MSINET.OCX)

回到vba编辑窗口, 打开附加控件,果然里面已经有了Microsoft Internet Transfer Control了,选上它点确定,这时在控件面板上已经多了一个Inet控件了,兴奋啊,赶紧把它拖入窗口内,突然弹出一个错误提示“无法创建控件,因为它未经正确授权"!!!!! 天啊,这是什么意思,难道是天要灭我吗???在网上拼命找相关问题的解决方法,很多遇到这个问题的人都是无功而反,还有一个成功解决此类问题的帖子用的是导入授权许可注册表文件成功了,把他的注册表文件导入到我电脑,结果失败!!此时,我已经有打退堂鼓的想法了!

 人有时候还是得坚持!之前用百度搜索这个问题翻了好几页都没有找到方法,好吧,最后一线希望压在谷歌上了,果断用谷歌查找,前面一两页的结果也不是很令人满意。眼看前方已经没有路了,这该怎么办?已经坚持到这份上了,放弃真是可惜!

人有时候需要停下来思考与反省!已经在百度和谷歌上找了好多方法了,都是类似的说法,根本解决不了问题。好吧,用脑子分析一下,既然是控件没有授权,也就是没有许可,好吧,改关键字搜一下看吧,输入”vba 控件 许可",结果有很多,突然哪根神经错乱了,打开了一个文章,其中就说他用一个微软提供的小软件解决了控件没有许可的问题。虽然说他的问题跟我的问题还是有点不一样,不过性质上貌似是相同的,不管了,赶紧下载了那个小软件 vb6cli.exe。看起来不错,运行它,提示成功!

赶紧回到vba编辑窗口,将inet控件拖入窗口,紧张啊,一松手,结果还是弹出之前那个错误!!!我已经到了崩溃的边缘。。。。。。
但是,经验告诉我,我还不能放弃,因为还有一点点渺茫的希望,那就是关闭excel,再重新打开它。我就这么干了,奇迹出现了,再次重复之前的操作竟然成功了!!!

这个大问题解决了,其它都是小问题啦。赶紧试了一下,果然可以用inet对象的openURL方法获取到远程的数据,太美妙了,整个世界仿佛变得和谐而美丽。

接下来,又在网上找到了一个用vba调用js解析json对象的方法,perfect!,赶紧写代码测试,果然可以,到此,一切技术难题都已攻克,开始完善功能代码了,一小会儿功夫,代码就写完了,赶紧点运行,只见excel表格中一行行数据闪动,不断地向下延伸,代码成功了,非常完美!

这下好交差了,Oye! 

正在加载评论...