Office中国论坛/Access中国论坛

标题: 调用计算器的问题 [打印本页]

作者: JosephTan    时间: 2012-2-7 05:26
标题: 调用计算器的问题
最近想做一个调用计算器的东西方便输入计算出的数据.在网上找了一下并改了一下不过运行不成功.
先创建一个窗体然后加上一个textbox和一个按钮按钮上的点击事件如下:
Private Sub Command2_Click()

Me.Text0.SetFocus '把焦点定在输入框
SendKeys "+{HOME}", True  '全选计算算式
SendKeys "^x", True '剪切计算算式


Dim ReturnValue
ReturnValue = Shell("Calc.EXE", 1) ' 运行计算器。
AppActivate ReturnValue ' 激活计算器。这句指令会出错,不知什么原因?

SendKeys "^v", True '粘帖计算算式
SendKeys "=", True ' 取得总合。
SendKeys "^c", True

SendKeys "%{F4}", True ' 按 ALT+F4 关闭计算器。

End Sub

运行的时候我在text0上输入1+1然后按那个按钮.就出现下图这样的错误:
[attach]48256[/attach]
请教这是什么出了问题?应该如何解决?
作者: Grant    时间: 2012-2-7 14:00
本帖最后由 Grant 于 2012-2-7 14:00 编辑

在AppActivate ReturnValue之前加一个延时,原因是计算器还没打开就执行了
作者: JosephTan    时间: 2012-2-7 17:41
本帖最后由 JosephTan 于 2012-2-7 17:54 编辑
Grant 发表于 2012-2-7 14:00
在AppActivate ReturnValue之前加一个延时,原因是计算器还没打开就执行了


谢谢.真的是如此.
我改成这样:
Private Sub Command2_Click()

Me.Text0.SetFocus '把焦点定在输入框
SendKeys "+{HOME}", True  '全选计算算式
SendKeys "^x", True '剪切计算算式
Dim ReturnValue
ReturnValue = Shell("Calc.EXE", 1) ' 运行计算器。
Call Sleep(500)
AppActivate ReturnValue ' 激活计算器。这句指令会出错,不知什么原因?

SendKeys "^v", True '粘帖计算算式
SendKeys "=", True ' 取得总合。
SendKeys "^c", True '复制结果

SendKeys "%{F4}", True ' 按 ALT+F4 关闭计算器。

Me.Text0.SetFocus '把焦点给回输入框
SendKeys "^v", True '粘帖结果给输入框
End Sub


这段代码在单个的窗口运行没事.问题是有时候不知道我输入的控件是什么,比如说我在导航窗体打开了我放票子窗体,然后在发票子窗体里又在它的订单详情的子窗体里面的某个字段做计算.这个时候应该怎么应用这段代码来计算我想要的结果呢?
比如说我现在把这段代码写入一个函数,然后用AutoKeys宏来调用这个函数,而我需要进入那么多层子窗体来找到这个焦点所在控件的名称.那应该怎么办?如下图所示:
[attach]48265[/attach]
作者: Grant    时间: 2012-2-8 21:36
目测还不知道什么情况,多想点思路应该不难解决
作者: JosephTan    时间: 2012-2-10 11:14
本帖最后由 JosephTan 于 2012-2-10 11:26 编辑
Grant 发表于 2012-2-8 21:36
目测还不知道什么情况,多想点思路应该不难解决


这个已经解决了,没有我想得那么复杂

另外我想加问一个问题:
如果我在输入数据的时候比如说我的这个字段本身是应该输入数字的,但是我输入了公式,这就出现错误了,那么这样一个事件是怎么触发的呢?也就是说我想让这个事件触发来执行计算机调用的函数.有办法可以做到吗?这样我就没有必要按另外一个快捷键了,直接按TAB就可以正确输入结果了.
作者: Grant    时间: 2012-2-10 11:45
这个是Access本身字段的机制,也可以用有效性来控制,但是还是缺乏灵活性,个人更喜欢用vba来掌控他们的生死大权
因为我的地盘我做主
作者: Grant    时间: 2012-2-10 13:32
数据宏不合适判断数据类型,数据宏相当于SQL Server的触发器,就是说更新前更新后要执行的数据动作
例如:我修改了物料ID,触发修改后执行修改其他流程单据的物料ID,以保障数据的准确性
大大减少程序员的工作量,我觉得你所说的那个工作在vba比较合适




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3