ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南

[分享] 在winHttp中使用同步与异步。。。

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2015-6-7 11:31 | 显示全部楼层
本帖已被收录到知识树中,索引项:网页交互
本帖最后由 liucqa 于 2015-6-7 13:14 编辑
浮华、缠绕指尖 发表于 2015-6-7 08:59
可能大家对第二种方式很感兴趣,速度在那儿放着的,但往往是这一点,需要特别注意的是,如果一次性并发过大 ...

如果有可能的话,看看能否将代码修改完整。

采用winhttp异步并发采集网页,需要处理许多问题,所以一个简单的类是无法达成异步期望的效果的。

大概你给出的异步代码依赖func.xla,而且没怎么测试吧,运行起来频频报错,那个窗体进度条是无效的。把m改成2000或者10000测试看看...反正我的Excel是报错停止工作了

一个完整的异步代码,至少应该提供启动异步、回调结束的进度提示,以便使用者能够判断是不是程序执行结束了,这需要类模块与主模块之间做交互,在异步回调结束之前,主模块是不能结束运行的。

需要注意的是,在Excel运行的时候,vba同时操作两个cells会导致Excel报错,而大量做异步并发的时候,这种情况发生的概率挺大,需要对代码做优化以降低概率,或者提供错误处理的代码。当然,最好的办法是别用vba搞并发操作Excel,呵呵!

最后,还是要对你的学习精神表示支持,论坛像你这样的会员越来越少了

...

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-6-7 13:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
liucqa 发表于 2015-6-7 11:31
如果有可能的话,看看能否将代码修改完整。

采用winhttp异步并发采集网页,需要处理许多问题,所以一 ...

老师也看出来了,其实我一般不会去操作excel,输出只是在最后一步,我这样演示只是为了让大家更方便的看出异步的效果而已,兼顾看顺序和速度而已。

我的代码和func.xla是无任何关系的,那里面只是存放了一些我常用的代码以及为了引用某些dll方便点。

至于启动异步、回调结束的进度提示,这个其实是一件很简单的事,顶多就相当于Interlocked.Increase的功能而已

引用老师的一句叫,指路而无暇爬山,当然我说过,老师也可以将自己比较成熟的案例共享一下供大家学习学习呗。。


TA的精华主题

TA的得分主题

 楼主| 发表于 2015-6-7 14:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1.       Do
  2. BeginRequest
  3. retryTimes = retryTimes + 1
  4. Loop Until retryTimes < 10
复制代码

嗯,其实就在On_Error中加上这一句就好了,重试次数不一定非得过多,关键一点是需要控制他的并发量,这个也可以用代码来实现的,就比如是1W次的并发,这样的量就算以你的最大网速来下载也会需要不少时间吧,再说并发运行的时间,就相当是你的重复次数*默认的超时时间内需要完成,但以大家的网速,在这么短的时间根本达不到这样的下载量,所以还是会有不少数据会丢失的。
这种并发的后期处理就看大家怎么用了,用得好当然乐,没用好的话也无需悲观,大不了,待程序运行完了,再根据针对超时的页面再次并发就好了

TA的精华主题

TA的得分主题

发表于 2015-6-7 14:06 | 显示全部楼层
本帖最后由 liucqa 于 2015-6-7 14:08 编辑
浮华、缠绕指尖 发表于 2015-6-7 13:31
老师也看出来了,其实我一般不会去操作excel,输出只是在最后一步,我这样演示只是为了让大家更方便的看 ...

我的意思是说,你得提供一个能够正确运行的代码,这样我才能放入知识树。

你目前的代码需要修改。

你把func.xla关掉,再把m调整到2000,看看你代码运行情况就知道了。
其他的交互、错误处理之类的功能,能提供当然更好,不能提供也不影响放入知识树。

最后,还是要对你这种乐意分享,无私奉献的精神表示感谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-6-7 14:21 | 显示全部楼层

设置成1000的,动画效果如下,当然可以将数据放到数组也是可以

异步.gif





winHttp异步 (Advanced).rar

26.39 KB, 下载次数: 545

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-6-7 14:31 | 显示全部楼层
liucqa 发表于 2015-6-7 14:06
我的意思是说,你得提供一个能够正确运行的代码,这样我才能放入知识树。

你目前的代码需要修改。

老师也可以把你的代码共享一下呗。

TA的精华主题

TA的得分主题

发表于 2015-6-7 14:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
浮华、缠绕指尖 发表于 2015-6-7 14:21
设置成1000的,动画效果如下,当然可以将数据放到数组也是可以

我设成2000测试,Excel停止响应了。

TA的精华主题

TA的得分主题

发表于 2015-6-7 14:58 | 显示全部楼层
vba 不是单线程吗,异步能实现多线程么?

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-6-7 15:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
liucqa 发表于 2015-6-7 14:57
我设成2000测试,Excel停止响应了。

哈哈,你的问题,我的设置成1W也是OK的,我再传一个数组输出的吧 winHttp异步之数组输出.rar (30.92 KB, 下载次数: 519)

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-6-7 15:15 | 显示全部楼层
codexq 发表于 2015-6-7 14:58
vba 不是单线程吗,异步能实现多线程么?

看效果看图就知道了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 18:38 , Processed in 0.042100 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表