ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 8730|回复: 9

[求助] 通过计划任务打开EXCEL自动执行程序

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-3-12 20:35 | 显示全部楼层 |阅读模式
我通过WINOWS的任务计划来定时打开EXCEL表,然后在工作薄打开事件中调用程序去网站上取当前在线人数,

现在有个问题,如果是计划任务自动打开的话,就取不到数,如果是我手动打开工作薄,就可以取到数,不知道为啥会这么奇怪,

TA的精华主题

TA的得分主题

发表于 2017-3-12 20:42 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
程序打开时有可能没不执行宏

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-12 20:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
有执行,可以看到程序自动的打开指定的网页,

TA的精华主题

TA的得分主题

发表于 2017-3-12 20:50 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
上附件看看是不是代码问题

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-12 20:52 | 显示全部楼层
注意到一个问题,我如果手动打开EXCEL的话,EXCEL的窗口是最先出现的,如果是计划任务调用的话,可以看到,是网页先打开,EXCEL窗口要过会才看到有出现,
我在想是不是这个延迟导致的取不到数,

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-12 20:54 | 显示全部楼层
lss001 发表于 2017-3-12 20:50
上附件看看是不是代码问题

如果是代码问题的话,手动也会有问题了,但是手动打开EXCEL,是一点问题也没有的,

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-12 21:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
workbook的打开事件,
  1. Private Sub Workbook_Open()
  2.    
  3. If Minute(Now) Mod 5 = 0 Or Minute(Now) = 0 Then

  4.     Call test1

  5. End If

  6. End Sub
复制代码

模块
  1. Sub test()

  2. On Error Resume Next

  3. Dim ie As Object
  4. Dim ie1 As Object
  5. Dim doc As Object
  6. Dim i As Integer
  7. Dim x As Integer
  8. Dim iCol As Integer
  9. Dim lhWndP As Long

  10. Set ie1 = CreateObject("InternetExplorer.Application")

  11. ie1.Visible = True
  12. ie1.Navigate "http://bip.countrygarden.com.cn/sys/portal/page.jsp?pageId=159cb79eea9d3d6a8349ca840e0894d4"

  13. Do While ie1.ReadyState <> 4 Or ie1.Busy
  14.     DoEvents
  15. Loop

  16. Set doc = ie1.document

  17. If Not doc.all("j_username") Is Nothing Then

  18.     doc.all("j_username").Value = "*****"
  19.     doc.all("password").Value = "****"
  20.         
  21.     For Each link In doc.getelementsbytagname("a")
  22.             
  23.         If link.Text = "登录" Then
  24.                
  25.             link.Click
  26.             Exit For
  27.                
  28.         End If
  29.             
  30.     Next
  31.         
  32.     Do While ie1.ReadyState <> 4 Or ie1.Busy
  33.         DoEvents
  34.     Loop

  35. End If

  36. Application.Wait (Now + TimeValue("00:00:05"))

  37. Set ie = CreateObject("InternetExplorer.Application")

  38. ie.Visible = True
  39. ie.Navigate "http://bip.countrygarden.com.cn/sys/portal/page.jsp?pageId=159cb79eea9d3d6a8349ca840e0894d4"

  40. Do While ie.ReadyState <> 4 Or ie.Busy
  41.     DoEvents
  42. Loop

  43. Set doc = ie.document

  44. If Not doc.all("j_username") Is Nothing Then

  45.     doc.all("j_username").Value = "*****"
  46.     doc.all("password").Value = "*****"
  47.         
  48.     For Each link In doc.getelementsbytagname("a")
  49.             
  50.         If link.Text = "登录" Then
  51.                
  52.             link.Click
  53.             Exit For
  54.                
  55.         End If
  56.             
  57.     Next
  58.         
  59.     Do While ie.ReadyState <> 4 Or ie.Busy
  60.         DoEvents
  61.     Loop

  62. End If

  63. Set doc = ie.document

  64. For Each span In doc.getelementsbytagname("a")
  65.    
  66.     If span.Text = "NC自助" Then

  67.         span.Click
  68.         Exit For

  69.     End If

  70. Next

  71. Do While ie.ReadyState <> 4 Or ie.Busy
  72.     DoEvents
  73. Loop

  74. Application.Wait (Now + TimeValue("00:00:10"))

  75. With CreateObject("Shell.Application")

  76. For Each oWin In .Windows
  77.    
  78.         If TypeName(oWin.document) = "HTMLDocument" And oWin.LocationName Like "HR门户*" Then
  79.    
  80.                 For Each div In oWin.document.activeelement.document.getelementsbytagname("div")
  81.             
  82.                         If div.innertext Like "在线人数*" Then
  83.                
  84.                                 num_online = Split(Split(div.innertext, "('")(1), "')")(0)
  85.                                 oWin.Quit
  86.                
  87.                         End If
  88.             
  89.                 Next
  90.       
  91.      End If

  92. Next

  93. End With

  94. ie1.Quit
  95. ie.Quit
  96. Set ie1 = Nothing
  97. Set ie = Nothing

  98. End Sub

  99. Sub test1()

  100. On Error Resume Next

  101. Dim today_date As Date
  102. Dim today_time As Date

  103. Dim rng_date As Range
  104. Dim rng_time As Range
  105. Dim Ret As Long
  106. Dim WINWND As Long

  107. Const TimeOut As Long = 10000

  108. If Hour(Now) = 0 And Minute(Now) = 0 Then
  109.    
  110.     today_date = DateValue(Year(Now) & "/" & Month(Now) & "/" & Day(Now) - 1)

  111. Else

  112.     today_date = DateValue(Year(Now) & "/" & Month(Now) & "/" & Day(Now))
  113.    
  114. End If

  115. today_time = TimeValue(Hour(Now) & ":" & Minute(Now) & ":00")

  116. Set rng_date = Sheets("SSC在线用户记录").Rows(1).Find(what:=today_date)
  117. Set rng_time = Sheets("SSC在线用户记录").Columns(1).Find(what:=today_time)

  118. If Not rng_date Is Nothing And Not rng_time Is Nothing Then
  119.    
  120.    Call test
  121.   
  122.    Sheets("SSC在线用户记录").Cells(rng_time.Row, rng_date.Column) = num_online
  123.    
  124.    MsgBoxEx 0, Sheets("SSC在线用户记录").Cells(rng_time.Row, rng_date.Column).Value, TimeOut / 1000 & "秒后自动关闭", vbOK + vbInformation, 1, TimeOut
  125.    
  126.    Call IeClose
  127.    
  128. End If

  129. ThisWorkbook.Save
  130. Application.Quit

  131. End Sub
复制代码
  1. Sub IeClose()

  2. For Each Process In GetObject("winmgmts:").ExecQuery("select * from Win32_Process where name='iexplore.exe'")

  3.     Process.Terminate (0)
  4.    
  5. Next

  6. End Sub
复制代码




TA的精华主题

TA的得分主题

发表于 2017-3-12 21:02 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
tonyibm 发表于 2017-3-12 20:52
注意到一个问题,我如果手动打开EXCEL的话,EXCEL的窗口是最先出现的,如果是计划任务调用的话,可以看到, ...

那么有可能是跟excel与IE启动先后有关,原则上应先启动excel再执行宏,用宏代码打开IE

TA的精华主题

TA的得分主题

发表于 2017-3-12 22:08 来自手机 | 显示全部楼层
让EXcel先数5000个羊羊后再call

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-12 22:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
没有用,我用了wait还是不行,
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-18 14:58 , Processed in 0.044558 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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