如何在VBA中将MS Access过滤的表格保存为查询

问题描述:

我需要能够将查询过的表格的结果保存在Microsoft Access(2010)中。 Access中的报告只有基于查询才是动态的。如果我根据表格本身生成报表,则不会保存任何搜索词/过滤器结果。在Access宏构建器中,DoCmd.save只保存当前表,我需要能够在VBA中执行“另存为”,这样我就可以将过滤后的表保存为查询。如何在VBA中将MS Access过滤的表格保存为查询

感谢

+0

声明“访问中的报告只有基于查询才是动态的”对我来说似乎是错误的。您可以通过在DoCmd.OpenReport命令中传递WHERE条件来运行包含任何数据子集的报告。这是在报告的记录源中没有标准的一个原因,因此您可以根据需要打印所有记录或任何子集。 – 2011-05-12 01:07:55

您将需要建立一个基于表单的筛选和排序依据设置的SQL语句。

Dim sSQL As String 

sSQL = "Select ... From MyTable" 

If Len(Me.Filter) > 0 Then 
    sSQL = sSQL & " Where " & Me.Filter 
End If 

If Len(Me.OrderBy) > 0 Then 
    sSQL = sSQL & " Order By " & Me.OrderBy 
End If 

Call DBEngine.Workspaces(0).Databases(0).CreateQueryDef("MyQueryName", sSQL) 
+0

感谢您的输入。我已经决定我可能会以错误的方式解决问题。我不会进行任何过滤,而是让用户更容易从其过滤的数据中生成报告。现在,没有任何代码可以使它更容易,用户必须将过滤表保存为查询,然后打开所需的报告,该报告基于他们刚刚保存的查询(每次保存过滤表时它们将替换查询报告是基于)。我如何编写一个宏来保存表格的过滤部分作为查询? – user748872 2011-05-12 19:42:04

+0

@ user748872 - AFAIK,没有直接的方法来做到这一点。您需要构建SQL并在代码中创建查询。请记住,您可以拥有一个在数据表视图中显示数据的子表单,并执行与我所提供的类似的操作。 – Thomas 2011-05-12 20:04:37

+0

感谢您的帮助!我认为在这种情况下,这只是用户必须做的事情之一。它不像我喜欢的那样友好,但至少它能完成工作。 – user748872 2011-05-12 20:42:17