有点背景:
我正在尝试创建一个脚本,根据一天中的时间将特定用户签名到程序中。每次错误的人在不正确的时间登记时,都有可能使公司花费20,000美元的许可证违规费用。
我尝试了一些东西,最简单的是一个电子表格,它使用简单的if语句来确定登录凭据并在shell中打开程序。在预定的等待时间之后,它将输入凭证。由于系统的速度不同,这是有问题的。
我以为我会去VBScript。可能与VBA有多大不同我认为......好几天之后,我迷失了。
这是我的剧本:
select t3.user_name, t3.date, t2.checkin, t3.checkout, t1.day
from 3rd_table as t3
inner join 2nd_table as t2 on t2.date = t3.date and t2.user_name = t3.user_name
inner join 1st_table as t1 on t1.date = t3.date;
不可否认,我不知道这是多少,因为我将其从其他脚本中解脱出来。例如,我不确定WMI是什么以及它在此脚本中的作用。此脚本返回的错误消息是编译错误。它调出第60行第1个字符,即我的函数的开头。
对此有任何帮助将非常感激!
答案 0 :(得分:1)
WaitForProcess()
功能嵌套在QADHelper
子内。 VBScript不允许嵌套子例程。WaitForProcess()
函数发现EXE正在运行并不意味着它的窗口显示并且它已准备好接受输入。您可能希望在超时循环中使用AppActivate
以确保SendKeys
命令到达目标窗口。WSHShell
的shell对象,您将其用于Run
,但您还需要将其用于AppActivate
来电和所有SendKeys
1}}语句。您正在使用Shell
,这是您的脚本未声明的。 SendKeys
需要一个字符串参数。像ENTER
和TAB
这样的键需要括在字符串中的大括号中:
WSHShell.SendKeys "{TAB}"
WSHShell.SendKeys "{ENTER}"
您需要使用ElseIf
代替Else If
。 ElseIf
被视为原始If
的条款。 Else If
创建了一个嵌套If
,期望End If
。