【问题标题】:How to use parameterized query in Excel using column as parameter?如何使用列作为参数在 Excel 中使用参数化查询?
【发布时间】:2014-12-12 07:59:37
【问题描述】:

我正在尝试开发一个可以在外部数据源中定位相应记录的电子表格。所以,假设我有一个带有标识值列表的 A 列。我想开发 B 列,它可能显示表中具有该值的行数。比如:

A              B
758348    "=SELECT COUNT(*) FROM MYTABLE WHERE IDVALUE=$A$1"
173483    "=SELECT COUNT(*) FROM MYTABLE WHERE IDVALUE=$A$2"

... 等等。所以,我想我会使用参数化查询(其中 IDVALUE=?),但这会提示我输入参数值,而不是使用左侧单元格中的值。有什么办法可以做到吗?

【问题讨论】:

  • 您是否在 Excel 中使用 Microsoft Query 或数据连接?

标签: excel parameterized-query excel-external-data


【解决方案1】:

我会使用参数化查询(其中 IDVALUE=?),但这会提示 我来输入参数值

根据您提到的,我了解到您正在使用 MS Query,您需要按照以下步骤操作

在 Excel 中使用单元格值作为参数进行参数化查询的步骤

  1. 首先转到 Excel 中的数据选项卡,然后选择外部数据源下的 MS Query

  1. 会出现一个弹出窗口,要求您选择数据源。选择数据源或添加新数据源并选择它。确保取消选中Use the query wizard to create or edit queries 在大多数情况下它不是很有用

  1. 然后会出现一个弹出窗口,要求您添加表格,请暂时选择任何表格。最好选择行数较少的表格。

  1. 然后会出现一个查询窗口,其中包含您选择的表及其数据

  1. 然后单击view 菜单并取消选中tables。这将删除查询窗口中的图形表示,并使您更容易更改 sql 查询

  1. 单击查询窗口中format 菜单下方的SQL 按钮。出现一个弹出窗口,您可以根据需要编辑查询。确保为所需的参数添加问号。

  1. 然后出现一个弹出窗口,要求您输入参数值,请暂时输入一些有效值

  1. 然后查询窗口根据输入的参数显示查询结果

  1. 单击查询窗口中view 菜单下方的exit 按钮。然后查询窗口关闭并弹出导入数据,询问在 excel 中的何处显示结果。相应地选择

  1. 然后单击左侧的“属性”按钮,然后单击“确定”。将出现一个新的弹出窗口,其中选择了默认使用选项卡。

  1. 在此选项卡中进行任何需要的更改,然后单击Definition 选项卡。点击edit query按钮旁边弹出窗口底部的Parameters按钮

  1. Parameters 弹出显示查询中使用的参数。在这里,您必须选择Get the value from following cell 单选按钮来选择单元格的值作为查询的参数。单击确定,您应该就完成了。


此方法适用于没有 VBA 经验的人。如果您了解 VBA,请参阅此 answer 以使用 VBA 实现类似的功能。

【讨论】:

  • 不幸的是,我收到一条错误消息,指出无法为无法以图形方式表示的查询创建参数。我想作为一种解决方法,我应该在数据库中创建一个视图,但是对于那些在数据库中没有适当权限的人,还有其他解决方案吗?
  • 这仍然只获得列第一行的输入参数。
【解决方案2】:

为此,我将创建一个 UDF 并让该函数的后端连接到您的访问数据库。像这样的:

Public Function countMyTable(IDValue As Double) As Long
'Requires:// Microsoft Access 16.0 Object Library
'Requires:// Microsoft Office 16.0 Access database engine Object Library
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = Access.DBEngine.Workspaces(0).OpenDatabase(DBFilePath, False, False)
Set rs = db.OpenRecordset("SELECT COUNT(1) FROM MyTable WHERE IDValue = " & IDValue, dbOpenSnapshot)
rs.MoveLast
countMyTable = rs(0)
db.close
End Function

希望这会有所帮助,TheSilkCode

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多