我正在编写Access数据库。我有许多相同的形式。这些用于编辑主联系人表中不同字段的查找列表。
e.g。有公司领域和国家领域。为每个可编辑列表打开的表单与每个可重复的vba代码相同,因为我无法确定如何从活动表单中引用活动表。
我目前用于清除表中所有是/否框的代码是:
Private Sub cmdClearTicks_Click()
Dim db As Database
' Dim sel As Control
Set db = CurrentDb
' Clear all ticks of selected records
db.Execute "UPDATE ContactCompany " _
& "SET Selected = null "
' Update Selected Field
Me.Requery
End Sub
ContactCompany
是表的名称。我希望能够在全局设置此子,但无法确定我应该替换ContactCompany
以引用当前打开表单中的表。我已经尝试了Me.RecordSource
这不起作用。
我非常感谢我认为这是一个非常简单的解决办法!
肖恩在下面发布了一个很好的解决方案。我现在很难过包括一个过滤器并将其定义为全球。
Sub SelectFiltered(RS As String)
Dim strFilter As String
Dim strSQl As String
If InStr(RS, "FROM") Then
RS = Mid(RS, InStr(RS, "FROM") + 5)
If InStr(RS, " ") Then RS = Left(RS, InStr(RS, " ") - 1)
End If
strFilter = Me.Filter
If Me.FilterOn = False Then
'Select Case MsgBox("No search or filter applied.", vbCritical + vbOKOnly, "Warning")
'End Select
strSQl = "UPDATE " & RS & " " & _
"SET Selected = 1 "
Else
strSQl = "UPDATE " & RS & " " & _
"SET Selected = 1 " & _
"WHERE " & strFilter
End If
DoCmd.SetWarnings False
DoCmd.RunSQL strSQl
DoCmd.SetWarnings True
End Sub
Me.filter在全局子中不起作用。肖恩 - 我相信你会在一秒钟内找到答案。再次感谢!
答案 0 :(得分:0)
使用Me.Recordsource
db.Execute "UPDATE " & Me.Recordsource & " SET Selected = null "
或者,如果您希望将其作为全局函数,请将Me.Recordsource
传递给它
Sub ClearTicks(RS as string,StrFilter as string)
Dim db As Database
Set db = CurrentDb
If InStr(RS, "FROM") Then
RS = Mid(RS, InStr(RS, "FROM") + 5)
If InStr(RS, " ") Then RS = Left(RS, InStr(RS, " ") - 1)
End If
' Clear all ticks of selected records
db.Execute "UPDATE " & RS & " SET Selected = null "
If StrFilter="" then 'no filter
Else 'filter
End If
End Sub
你的调用函数是:
Private Sub cmdClearTicks_Click()
ClearTicks Me.Recordsource,Me.Filter
Me.Refresh
End Sub
如果你想要一个可以更容易扩展的更可重用的函数方法,那么用Me.Name
作为参数(例如MySub Me.Name
)然后在你的可重用函数中调用sub / function:
sub MySub(FrmName as string)
Forms(FrmName).Filter
Forms(FrmName).Recordsource
Forms(FrmName).AnyOtherParamater