Access交流中心

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

VBA中Findrecord问题

Denzel  发表于:2014-03-16 12:57:47  
复制

我在Access中建立了一个窗体,在窗体中有“Find”、“Find Next”两个按钮。
“Find”按钮的VBA程序如下:
    search = InputBox("What do you want to search?", "Search Record", , 2000, 2000)
    Key.SetFocus
    DoCmd.FindRecord search, acAnywhere, , acSearchAll, , acAll
“Find Next”按钮的VBA程序如下:
    Screen.PreviousControl.SetFocus    
    DoCmd.FindRecord search, acAnywhere, False, acDown, False, acAll, False
先按“Find”按钮输入搜索内容找到第一个匹配项,再按“Find Next”按钮查找下一个匹配项。可是按“Find”按钮找到第一个匹配项之后再按“Find Next”按钮后屏幕焦点却停在原地不动,不进行下一个匹配项查询。如果用鼠标器点一下当前获得焦点字段的下一个字段,则“Find Next”按钮就有效一次。但每按一次“Find Next”按钮前都要手动转移一下焦点。如果把“Find Next”按钮的VBA语句中的“acAll”改为“acCurrent”也能解决问题,但这不是我想要的。我曾试着在语句 Screen.PreviousControl.SetFocus之后加入SendKeys "{Right}",问题也能解决,但是屏幕焦点在搜索到下一个匹配项之后会转移到匹配项的下一个字段。怎样才能解决这个问题呢?我想如果能通过VBA将屏幕焦点转移到当前获得焦点字段之下一个字段,问题应该就能解决。但是怎样将焦点转移到下一个相邻字段呢?求高手指点。谢谢!

 

Top
Denzel 发表于:2014-03-16 13:05:49

(原帖显示有问题,我把内容断开方便大家阅读。)
我在Access中建立了一个窗体,在窗体中有“Find”、“Find Next”两个按钮。
“Find”按钮的VBA程序如下:
    search = InputBox("What do you want to search?", "Search Record", , 2000, 2000)
    Key.SetFocus
    DoCmd.FindRecord search, acAnywhere, , acSearchAll, , acAll
“Find Next”按钮的VBA程序如下:
    Screen.PreviousControl.SetFocus    
    DoCmd.FindRecord search, acAnywhere, False, acDown, False, acAll, False
先按“Find”按钮输入搜索内容找到第一个匹配项,再按“Find Next”按钮查找下一个匹配项。可是按“Find”按钮找到第一
个匹配项之后再按“Find Next”按钮后屏幕焦点却停在原地不动,不进行下一个匹配项查询。如果用鼠标器点一下当前获得
焦点字段的下一个字段,则“Find Next”按钮就有效一次。但每按一次“Find Next”按钮前都要手动转移一下焦点。如果把
“Find Next”按钮的VBA语句中的“acAll”改为“acCurrent”也能解决问题,但这不是我想要的。我曾试着在语句 
Screen.PreviousControl.SetFocus之后加入SendKeys "{Right}",问题也能解决,但是屏幕焦点在搜索到下一个匹配项之后
会转移到匹配项的下一个字段。怎样才能解决这个问题呢?我想如果能通过VBA将屏幕焦点转移到当前获得焦点字段之下一个
字段,问题应该就能解决。但是怎样将焦点转移到下一个相邻字段呢?求高手指点。谢谢!




落尘_小新 发表于:2014-03-16 13:16:35

“Find Next”按钮的VBA程序改成这样试试:

    Screen.PreviousControl.SetFocus

    DoCmd.FindNext



Denzel 发表于:2014-03-16 13:44:14
回复楼上的朋友,不行啊,DoCmd.FindNext也是一样的效果。

Denzel 发表于:2014-03-20 13:10:49
我从VB的控件数组中获得了灵感,很完美地解决了这个问题。并且还能使Findrecord提示是否到了最后一条记录、第一条记录、最后一个匹配项或第一个匹配项。

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