Ms access 仅访问MS Access表中的筛选值

Ms access 仅访问MS Access表中的筛选值,ms-access,filtering,Ms Access,Filtering,是否可以从应用筛选器后显示的Access表中的行中获取值 请举例说明: 我有一个表格,员工在其中填写项目任务、项目时间等。 它被做成表格上的一张桌子。列在首字母、项目编号等方面的选择有限。人们喜欢通过access表和查询中的内置筛选功能对表进行排序。我进行了筛选,因此示例中只显示了项目LT1075 如何将这4行作为记录集或类似的内容获取?我需要获取所有小时字段中的值。我还需要在VBA中只复制这4行代码,并对其执行一些操作(人们需要的函数)。但是当我使用DAO时,我会得到“未过滤”表中的所有行

是否可以从应用筛选器后显示的Access表中的行中获取值

请举例说明:

我有一个表格,员工在其中填写项目任务、项目时间等。 它被做成表格上的一张桌子。列在首字母、项目编号等方面的选择有限。人们喜欢通过access表和查询中的内置筛选功能对表进行排序。我进行了筛选,因此示例中只显示了项目LT1075

如何将这4行作为记录集或类似的内容获取?我需要获取所有小时字段中的值。我还需要在VBA中只复制这4行代码,并对其执行一些操作(人们需要的函数)。但是当我使用DAO时,我会得到“未过滤”表中的所有行

如何仅使行可见

在excel中,有一个简单的函数,可以看到单元格,但我找不到访问权限

向你问好,埃米尔

编辑、试用:

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属性的引用无效”


我有一个线索,它不工作,因为我。*功能?因为该表位于某种子窗体中。但我在导航面板中只看到一个表单。(同时显示隐藏)。

您可以使用表单的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

我想你肯定会想扩大你正在寻找的。答案几乎可以肯定是肯定的,但我真的不确定您想做什么。我添加了一个示例,我希望它足够:)它100%清晰,您基本上希望获得对与表单过滤相同的记录集的访问权限,对吗?没错!我需要它在VBA。但一些变通办法也可以。我尝试对查询进行筛选,然后追加到表中,但追加没有“查看筛选”。有什么建议吗?我不希望从VBA应用筛选器,因为用户希望像往常一样在excel/access中单击来设置筛选器。听起来您的主窗体未绑定,数据位于子窗体中。如果是,并且按钮位于主窗体上,则
Me.RecordsetClone
不是有效的引用,因为主窗体没有记录集(行源)。在这种情况下,您需要获取子窗体的RecordsetClone。这不是一个好主意。当你有一个表单时,为什么要检查记录集?Dsum也是一个选项。逐行几乎从来都不是一个好主意。Dsum肯定可以用于
获取所有小时字段中的值
部分,但不是真正的
仅复制VBA中的这4行并对其执行操作
部分。似乎他想要一个包含表单过滤记录集的记录集,以用于其他目的。@Fionnuala:是的。记录在内存中,因此速度非常快。任何其他方法都会再次检索记录。@NewD您可以
选择Sum(Field)…
有十几种方法可以获取不正确的数据。问题的关键在于用户对问题的处理方法不正确。