陈伟 发表于: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
望高手指点一二,不胜感激!!
奇怪的是,采用宏命令实现的“快速跳转”功能,无论是否有过滤,一切都很正常。
附件是宏命令的实现方式截图。
望高手能从宏命令和VBA的比对中,找出问题的元凶。
找到问题所在了!可是不知道如何解决,望各位前辈指点:
一旦窗体使用了筛选功能,那么作为“快速跳转”的组合框类型将会由原来默认的vbLong变为vbString,从而导致varSelectedTransfer赋值错误,最终where语句无效!
之所以我需要一个If语句用于判断varSelectedTransfer的赋值,是因为“快速跳转”的组合框的数据类型有时是数字,有时是文字。
但筛选功能导致组合框的数据类型产生变化,这是没有预料到的问题。我该如何解决这种问题?
自己解决了:通过手工传递一个参数。
若大家有更好的办法,还望指教。
总记录:3篇 页次:1/1 9 1 :