设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2846|回复: 6
打印 上一主题 下一主题

[加载项] 调用计算器的问题

[复制链接]
跳转到指定楼层
1#
发表于 2012-2-7 05:26:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近想做一个调用计算器的东西方便输入计算出的数据.在网上找了一下并改了一下不过运行不成功.
先创建一个窗体然后加上一个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然后按那个按钮.就出现下图这样的错误:

请教这是什么出了问题?应该如何解决?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2012-2-7 14:00:19 | 只看该作者
本帖最后由 Grant 于 2012-2-7 14:00 编辑

在AppActivate ReturnValue之前加一个延时,原因是计算器还没打开就执行了

点评

我回复了你这贴,不过一直看不到通过审核.  发表于 2012-2-7 19:39
3#
 楼主| 发表于 2012-2-7 17:41:16 | 只看该作者
本帖最后由 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宏来调用这个函数,而我需要进入那么多层子窗体来找到这个焦点所在控件的名称.那应该怎么办?如下图所示:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
4#
发表于 2012-2-8 21:36:04 | 只看该作者
目测还不知道什么情况,多想点思路应该不难解决
5#
 楼主| 发表于 2012-2-10 11:14:56 | 只看该作者
本帖最后由 JosephTan 于 2012-2-10 11:26 编辑
Grant 发表于 2012-2-8 21:36
目测还不知道什么情况,多想点思路应该不难解决


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

另外我想加问一个问题:
如果我在输入数据的时候比如说我的这个字段本身是应该输入数字的,但是我输入了公式,这就出现错误了,那么这样一个事件是怎么触发的呢?也就是说我想让这个事件触发来执行计算机调用的函数.有办法可以做到吗?这样我就没有必要按另外一个快捷键了,直接按TAB就可以正确输入结果了.
6#
发表于 2012-2-10 11:45:28 | 只看该作者
这个是Access本身字段的机制,也可以用有效性来控制,但是还是缺乏灵活性,个人更喜欢用vba来掌控他们的生死大权
因为我的地盘我做主

点评

是否可以应用一下数据宏,我还没有想.比如说用插入前?我现在出去一下回来再考虑.  发表于 2012-2-10 12:18
7#
发表于 2012-2-10 13:32:01 | 只看该作者
数据宏不合适判断数据类型,数据宏相当于SQL Server的触发器,就是说更新前更新后要执行的数据动作
例如:我修改了物料ID,触发修改后执行修改其他流程单据的物料ID,以保障数据的准确性
大大减少程序员的工作量,我觉得你所说的那个工作在vba比较合适
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-26 12:19 , Processed in 0.134618 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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