ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] Access调用外部程序无响应时处理求助

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-5-18 15:21 | 显示全部楼层 |阅读模式
公司在access里写了点程序用来调用外部程序群发工资短信,设定发送每条短信等待10秒是足够的,但偶尔会出现发送响应慢,超过10秒的情况,这时AppActivate "G3 eWalk"语句会执行错误,从而程序终止执行。现在我希望将标红语句处加条判断,如果AppActivate "G3 eWalk"执行错误,则再等待30秒,这个if语句如何写,望高人帮助!!
程序代码如下:
Private Sub btnSMSSendSalaryTWS_Click()
    Dim MyDB As Database, MyQuery As QueryDef, MyData As Recordset
    Dim StartTime, EndTime
    Const MB_OK = 0, MB_OKCANCEL = 1    ' Define buttons.
    Const MB_YESNOCANCEL = 3, MB_YESNO = 4
    Const MB_ICONSTOP = 16, MB_ICONQUESTION = 32   ' Define icons.
    Const MB_ICONEXCLAMATION = 48, MB_ICONINFORMATION = 64
    Const MB_DEFBUTTON2 = 256, IDYES = 6, IDNo = 7   ' Define other.
    Set MyDB = CurrentDb()   
    Set MyData = MyDB.OpenRecordset("HRA_TWS_SMS_Base_SendThisTime", DB_OPEN_SNAPSHOT)
   
    MyData.MoveFirst
    Title = "MsgBox"
    msg = "This operation will send SMS salary bill to each mobile phone user by Wireless Manager - Status."
    msg = msg & " Do you want to continue?"
    DgDef = MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2   ' Describe dialog box.
    RESPONSE = MsgBox(msg, DgDef, Title)    ' Get user response.
    If RESPONSE = IDYES Then    ' Evaluate response
        msg = "Please open Wireless Manager - Status, and turn on radio."
        msg = msg & "Then press OK button."
        RESPONSE = MsgBox(msg)      
        Do Until MyData.EOF
                    
            AppActivate "G3 eWalk"
            
            SendKeys "^n", True
            SendKeys MyData![MPhoneNo], True
            SendKeys "{Tab}", True
            SendKeys MyData![SalaryDetail], True
            SendKeys "%s", True
            SendKeys "{Enter}", True
                    
            MyData.MoveNext
            
            StartTime = Timer
            EndTime = Timer
            
            Do While EndTime - StartTime <= 10
                EndTime = Timer
            Loop
            
        Loop
               
        MyData.Close
               
    End If
   
    AppActivate "Microsoft Access"
    MsgBox "Send successfully!"
End Sub

TA的精华主题

TA的得分主题

发表于 2012-5-18 16:19 | 显示全部楼层
你应当是用sendkey方式来模拟键盘操作,这个方式不会有返回任何返回信息的作为判断
但从API角度来说,也有可能的,但需要看这个程序有什么发送前或发送后的变化,
举个例子:如有些软件你在发送时,这个窗口标题会改成:"sending"或者"正在发送中"
等发送完之后会恢复常态的其他标题,这时,我们可以通过API来抓取窗口标题的变化,如10秒后,窗口恢复常态标题
就继续发送新的短信,否则再等10秒,

第二种方式,也要用到API,去抓取那个"G3 eWalk"的窗口的按钮句柄,因为大多点击发送时,这个按钮是变为灰色的(enabled=false),当发送完之后,又会变为可用状态,所以需通过API去抓取这个按钮的状态变化,通过状态变化来判断是否已发送完成

至于API的用法,TZ可以在网上搜一下关于API抓相关窗口句柄的贴子,需要TZ自已多加测试哦

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-21 09:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
非常感谢你的指点,我继续研究研究{:soso_e100:}
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-9 20:43 , Processed in 0.017708 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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