0

我正在编写一个 Access 数据库。我有许多相同的表格。这些用于编辑我的主要联系人表中不同字段的查找列表。

例如,有一个公司字段和一个国家字段。为每个可编辑列表打开的表单与每个中的重复 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 在全局 sub 中不起作用。肖恩 - 我相信你会在几秒钟内得到答案。再次感谢!

4

1 回答 1

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 MySub(FrmName as string)
Forms(FrmName).Filter
Forms(FrmName).Recordsource
Forms(FrmName).AnyOtherParamater
于 2012-06-21T14:27:38.283 回答