Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

[5分]关于鼠标按下与弹起完成的判断

chinasa  发表于:2014-08-09 20:46:40  
复制

我有下面一段代码,从EXCEL表中取数据填写到某个系统中,EXCEL有多条记录,当在系统中录入完一条记录后,在系统中点“插入复制”  按钮,然后系统会插入一条新记录,然后我在此新记录中填写EXCEL的下一条记录,现在的问题是:插入新记录还未完成,系统就开始填写EXCEL中下一条记录信息,也就是把系统中当前记录覆盖掉了,而我要新增记录的。

请问:如何等“插入复制按钮”完成后再继续循环后面的代码?我曾经使用 Sleep 1000,但还是不行。曾经看别人在WEB中判断BUSY,但在这里不知道是否可行及如何使用。也曾经想弄一个循环,直到判断新记录出现,但由于新记录是复制上一条记录,内容都相同,所以不知道如何判断是新记录,也担心成为死循环。

     Do Until xlSheet.Cells(x, 13) = "所需资料" Or xlSheet.Cells(x, 13) = "     总       体      积"
            SendMessage hmyw, WM_SETTEXT, 0, xlSheet.Cells(x, 7) & Chr(0)  '英文品名
            SendMessage js, WM_SETTEXT, 0, xlSheet.Cells(x, 10) & Chr(0)  '件数       数字
                x = x + 1
             DoEvents
               PostMessage crfzan, WM_LBUTTONDOWN, 0, ByVal 0 '鼠标按下 插入复制按钮
               PostMessage crfzan, WM_LBUTTONUP, 0, ByVal 0 '鼠标弹起 插入复制按钮
             DoEvents
       Loop

 

Top
cspa 发表于:2014-08-09 21:55:21

建议将动作逻辑改成为:

在循环中当在系统中录入完一条记录后,用msgbox函数中断循环,并询问是否插入新记录,如果是再插入一条新记录,然后再在此新记录中填写EXCEL的下一条记录。

Do Until xlSheet.Cells(x, 13) = "所需资料" Or xlSheet.Cells(x, 13) = "     总       体      积"
            SendMessage hmyw, WM_SETTEXT, 0, xlSheet.Cells(x, 7) & Chr(0)  '英文品名
            SendMessage js, WM_SETTEXT, 0, xlSheet.Cells(x, 10) & Chr(0)  '件数       数字
                x = x + 1
             DoEvents
             Response = MsgBox("是否继续插入新记录", vbYesNo, "提示信息")
             If Response ="vbYes" Then
                  插入新记录语句

                  填写下一条记录语句

                  DoEvents  

              else

                Exit Loop           '否则退出循环(或无动作,继续循环)
            End If     
       Loop

 



西出阳关无故人 发表于:2014-08-09 22:40:12

如果excel是标准的记录型数据(一行为一条完整的记录),用导入不是更好吗?



chinasa 发表于:2014-08-10 07:25:18

cspa老师,由于需要循环上百次,每条记录都点确认,有点麻烦,不知道是否有其他办法?如果没有其他办法?

西出阳关无故人,您好!由于系统的接口我没有,所以无法直接导入。

 



西出阳关无故人 发表于:2014-08-10 13:54:16

strSQL = "insert into acc表(字段1,字段2,...,字段n) select 字段1,字段2,...,字段n  from [Excel 8.0;Database=" & excel文件名(含路径) & "].[sheet名称$]"

docmd.runsql  strSQL



chinasa 发表于:2014-08-10 16:16:20
西出阳关无故人,您好!由于需要输入的系统并不是我的系统,对方只提供手工录入的功能,我没办法通过SQL语句来更新。只能通过获得窗口句柄,然后再模拟手工录入的形式输入内容。

西出阳关无故人 发表于:2014-08-11 08:36:30
恩理解了. PostMessage crfzan, WM_LBUTTONDOWN, 0, ByVal 0 '鼠标按下 插入复制按钮
               PostMessage crfzan, WM_LBUTTONUP, 0, ByVal 0 '鼠标弹起 插入复制按钮
这两句可能没有起作用:导致永远只录入了excel的最后一条记录.

chinasa 发表于:2014-08-11 11:08:17

这两句有时有作用,有时没作用,可能是有时还没等这两句执行完,后面的语句就开始先执行了。

现在正在查询SENDMESSAGE的用法,理论上这两个用法是一样的,但换成SENDMESSAGE就没反应(只能获得焦点),参考网上重复两遍也没有完成单击效果。



chinasa 发表于:2014-08-11 11:11:43
                  Do Until s2 = 0 Or s2 = "" Or IsNull(s2) = -1
                             Tlong2 = GetWindowTextLength(js) + 1 '子窗口标题
                             s2 = String(Tlong2, Chr(0))
                             GetWindowText js, s2, Tlong2 '子窗口标题
                      Sleep 1000
                  Loop
实在不行的话,我准备象上面这样,判断其中一个字段是否已经为空,来判断其添加按钮事件是否完成,大家觉得可行吗?

总记录:8篇  页次:1/1 9 1 :