仅访问MS Access表中的筛选值

时间:2015-03-02 12:07:19

标签: ms-access filtering

是否可以从应用过滤器后显示的Access表中的行中获取值?

请求示例:

我有一张表,员工填写项目任务,项目工作时间等。 它是作为表格上的表格制作的。列在Initials,Project number等中的选择有限。人们喜欢通过访问表和查询中的内置过滤器函数对表进行排序。我进行了过滤,因此只有示例中显示的项目LT1075。

如何将这4行作为记录集或类似的东西?我需要在所有小时字段中获取值。我还需要在VBA中只复制那4行并对其进行处理(人们想要的功能)。但是当我使用DAO时,我得到了#34; Unfiltered"表

Example

我如何只获得可见的行?

在excel中,有一个简单的函数,有些是cell_visible,但我无法获得对Access的赦免。

最诚挚的问候,埃米尔。

编辑,试用:

Public Sub Test1_Click()

Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone
While Not rs.EOF
    ' Do calculation stuff on record.
    rs.MoveNext
Wend

End Sub

它被放在"测试1"上图中的按钮。

我收到错误:"运行时错误7951 - 您输入的表达式对RecordsetClone属性的引用无效"

我有一个线索,因为Me。*功能它不起作用?由于该表是某种子表单。但我在导航面板中只看到一个表单。 (隐藏也显示)。

1 个答案:

答案 0 :(得分:2)

您可以使用以下格式的RecordsetClone:

Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone
While Not rs.EOF
    ' Do calculation stuff on record.
    rs.MoveNext
Wend

您可以将记录添加到记录集中:

Public Sub CopyRecords()

    Dim rstSource   As DAO.Recordset
    Dim rstInsert   As DAO.Recordset
    Dim fld         As DAO.Field
    Dim strSQL      As String
    Dim lngLoop     As Long
    Dim lngCount    As Long

    strSQL = "SELECT TOP 1 * FROM tblStatus"

    Set rstInsert = CurrentDb.OpenRecordset(strSQL)
    ' rstSource can be any recordset, here the RecordsetClone of the form.
    Set rstSource = Me.RecordsetClone

    With rstSource
       While Not .EOF
           With rstInsert
               .AddNew
               For Each fld In rstSource.Fields
                   With fld
                       If .Attributes And dbAutoIncrField Then
                           ' Skip Autonumber or GUID field.
                       ElseIf .Name = "Total" Then
                           ' Special cases.
                           ' Insert default job code.
                           rstInsert.Fields(.Name).Value = 0
                       ElseIf .Name = "PROCESSED_IND" Then
                           rstInsert.Fields(.Name).Value = vbNullString
                       Else
                           ' Copy field content.
                           rstInsert.Fields(.Name).Value = .Value
                       End If
                   End With
               Next
               .Update
           End With
           .MoveNext
        Next
        rstInsert.Close
        .Close
    End With

    Set rstInsert = Nothing
    Set rstSource = Nothing

End Sub