Access交流中心

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

【求助】正常打开可用,可一旦使用过滤后就不可用

陈伟  发表于:2011-06-22 14:33:46  
复制


我模仿案例-罗斯文的工具栏cbo设计了“快速跳转”功能:通过选择cbo项,可跳转到相应记录。
一开始我采用宏命令实现,一切正常(正常打开form,可实现跳转;采用某个过滤后,继续使用快速跳转,依然可用)
为了方便移植,我改用VBA实现,代码如下所示,但出现了问题:正常打开form,一切正常,可一旦使用过滤功能后就不可用。

'以下是我用VBA实现的代码
'快速跳转——必选参数:[链接字段]

Public Sub gQuickTransfer(ConnectControlName As String)
    Dim varSelectedTransfer As Variant
    If (IsNull(Screen.ActiveControl)) Then
        Exit Sub
    End If
    On Error Resume Next
    If (Screen.ActiveForm.Dirty) Then
        DoCmd.RunCommand acCmdSaveRecord
    End If
    On Error GoTo 0
    If VarType(Screen.ActiveControl) = vbString Then
        varSelectedTransfer = "'" & Screen.ActiveControl & "'"
    Else
        varSelectedTransfer = Screen.ActiveControl
    End If
    If (CurrentProject.IsTrusted) Then
        Screen.ActiveControl = Null
    End If
    If (Screen.ActiveForm.FilterOn) Then
        DoCmd.RunCommand acCmdRemoveFilterSort
    End If
    DoCmd.SearchForRecord , , acFirst, ConnectControlName & " = " & varSelectedTransfer
End Sub

'以下是我在“frm商品资料”中所调用的代码
'快速跳转

Private Sub cboQuickTransfer_AfterUpdate()
    Call gQuickTransfer("[商品ID]")
End Sub

再次描述症状:
1、通过导航菜单正常打开“frm商品资料”,上述 “快速跳转”功能一切正常。
2、一旦使用某种过滤功能,比如采用红尘如烟的ActiveFormFilter通用绑定窗体数据筛选器,或者是从其他窗体调用打开“frm商品资料”,并用where语句定位到某个记录,那么上述 “快速跳转”功能失效。

我google了很久,与我这个症状相同的是johnlute在以下论坛所提出的问题,若大家对我的上述描述有疑问,可参阅该英文描述:
http://www.accessmonster.com/Uwe/Forum.aspx/access-formscoding/56943/remove-a-filter
http://groups.google.com/group/microsoft.public.access.formscoding/browse_thread/thread/d0aa7031098338ea?pli=1

望高手指点一二,不胜感激!!

 

Top
domecc 发表于:2011-06-22 14:39:44

奇怪的是,采用宏命令实现的“快速跳转”功能,无论是否有过滤,一切都很正常。

 

附件是宏命令的实现方式截图。

 

望高手能从宏命令和VBA的比对中,找出问题的元凶。



陈伟 发表于:2011-06-22 23:11:41
找到问题所在了!可是不知道如何解决,望各位前辈指点:

一旦窗体使用了筛选功能,那么作为“快速跳转”的组合框类型将会由原来默认的vbLong变为vbString,从而导致varSelectedTransfer赋值错误,最终where语句无效!

之所以我需要一个If语句用于判断varSelectedTransfer的赋值,是因为“快速跳转”的组合框的数据类型有时是数字,有时是文字。
但筛选功能导致组合框的数据类型产生变化,这是没有预料到的问题。我该如何解决这种问题?


陈伟 发表于:2011-06-22 23:59:38

自己解决了:通过手工传递一个参数。

 

若大家有更好的办法,还望指教。



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