ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

EH搜索     
EH云课堂-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 EH云课堂直播课程免费学 打造核心竞争力的职场宝典
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
查看: 233|回复: 5

[求助] 关于Sendkeys应用到外部程序的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-12-16 21:13 | 显示全部楼层 |阅读模式
本帖最后由 jeff_ps2009 于 2019-12-16 21:20 编辑

  各位大神好,我现在想实现把Excel表格内容依次填写到网页的文本框里面,所以通过各种搜索找到了“SendKeys”的方法,如附件。
通过其他大神的方法,没有直接使用SendKeys,而是用“WScript.shel”的方式,避免操作无效。但现在的问题是,我在一台笔记本上操作以下代码可以达到理想效果,但复制到其他电脑(台式,系统与笔记本一样,因为是公司内部电脑,只是CPU不一样),确出现问题,例如,WSendKeysPaste (Keys)这一步的时候,总是粘贴2次,而且还漏掉数据,运行也很卡很缓慢。我也尝试Application.Wait (Now()) + TimeValue("00:00:01") 延迟的方式,可以解决以上问题,但是1秒是最小单位,且整体操作效率底下。现在非常纳闷,为什么笔记本上面没有任何问题(从excel上粘贴几十个数值到1.txt,只要1秒多),复制到同一操作系统的台式机上面(我也没测试其他电脑)就不行了。求大神们帮帮看看。


另外,肯定会有大神说为什么不利用网抓来实现,本人比小白还要小白,完全没基础,也没有时间和能力去学习如此复杂的功能。


代码中test1与test2  是用1.txt 这个文本文档来做实验。真正想实现的是test3和test4中去到网页(谷歌、火狐都行)。因为是小白,所以代码很简陋确又冗杂,没什么逻辑性,大家别见笑~~~
补充下图片:
1.PNG 是出现问题的运行结果

2.PNG是正常运行结果
  1. Sub test1()

  2. AppActivate "1.txt"
  3. WSendKeysPaste (Keys)
  4. WSendKeysTab (Keys)
  5. Backtocopy
  6. End Sub

  7. Sub test2()

  8. AppActivate "1.txt"
  9. WSendKeysPaste (Keys)
  10. WSendKeysTab (Keys)
  11. 'Application.Wait (Now()) + TimeValue("00:00:01")
  12. Backtocopy
  13. End Sub

  14. Sub WSendKeysTab(Keys)
  15.     Set a = CreateObject("WScript.shell")
  16.     a.SendKeys "{Tab}"
  17.     Set a = Nothing
  18. End Sub

  19. Sub WSendKeysPaste(Keys)
  20.     Set a = CreateObject("WScript.shell")
  21.     a.SendKeys "^v"
  22.     Set a = Nothing
  23. End Sub

  24. Sub test3()
  25. AppActivate "Google Chrome"
  26. WSendKeysPaste (Keys)
  27. WSendKeysTab (Keys)
  28. Backtocopy
  29. End Sub

  30. Sub test4()
  31. AppActivate "Google Chrome"
  32. WSendKeysPaste (Keys)
  33. WSendKeysTab (Keys)
  34. 'Application.Wait (Now()) + TimeValue("00:00:01")
  35. Backtocopy
  36. End Sub

  37. Sub Backtocopy()

  38. Windows("1.xlsm").Activate


  39. If ActiveCell.Value = "" Then

  40. Exit Sub

  41. Else

  42. Dim x, y
  43. x = Selection.Row()
  44. y = Selection.Column()

  45. Range(Cells(x, y + 1), Cells(x, Columns.Count)).SpecialCells(xlCellTypeVisible).Cells(1, 1).Select

  46. Selection.Copy

  47. test2

  48. End If

  49. End Sub
复制代码



1.PNG
2.PNG

1.zip

13.37 KB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2019-12-17 08:56 来自手机 | 显示全部楼层
http://club.excelhome.net/thread-568512-1-1.html
系统原因估计比较麻烦,按键精灵呢!看看上面这个吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-17 10:43 | 显示全部楼层
zpy2 发表于 2019-12-17 08:56
http://club.excelhome.net/thread-568512-1-1.html
系统原因估计比较麻烦,按键精灵呢!看看上面这个吧

谢谢大神,好巧,我在前几天研究这个的时候,居然下载过您的这个KeyGhost,但不知道为什么,我修改源数据,exe程序里面的数值很奇怪,例如,您这个是复制粘贴5次是吧(我的理解),我把内容对应改成1 2 3 4 5,结果出来就是1             5。我也不知道为什么~。  因为是公司内网,所以网上的按键精灵是用不了的~~

TA的精华主题

TA的得分主题

发表于 2019-12-17 15:39 来自手机 | 显示全部楼层
jeff_ps2009 发表于 2019-12-17 10:43
谢谢大神,好巧,我在前几天研究这个的时候,居然下载过您的这个KeyGhost,但不知道为什么,我修改源数据 ...

这个就是按键精灵,外挂是有点不稳定,你不要纯粹的一位阿拉伯数字,试试,比如用中文或者英文2-6字符。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-17 18:12 | 显示全部楼层
zpy2 发表于 2019-12-17 15:39
这个就是按键精灵,外挂是有点不稳定,你不要纯粹的一位阿拉伯数字,试试,比如用中文或者英文2-6字符。

好的明白了,刚刚又试了下12345,又可以~~~~我要实现的可能就是纯的阿拉伯数字,个位或者十位~另外,大神可否给一下源码参考学习下,但我不知道这个是基于什么做的,所以单纯的以为是VBA吗? 因为我想试着修改下功能,例如 把5次变成更多次 或者更少次之类的~~~如果是其他语言的话那就不劳烦您了,超出了我可理解的范围了~~~~~总之非常感谢您的帮助~~~~

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-17 21:11 | 显示全部楼层
已经解决了~~~~ 用sleep延迟的方式就可以了~~~~~~
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub SleepXXX()
Sleep 100
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关注官方微信,每天学会一个新技能

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

GMT+8, 2020-2-17 06:44 , Processed in 0.407482 second(s), 19 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2020 Wooffice Inc.

   

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

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

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