如何在Excel中向外部数据查询添加参数,这些参数无法以图形方式显示?

时间:2010-06-22 09:37:48

标签: excel vba excel-2007 ms-query

我经常使用MS Excel的Get External Data创建简单的报表 - 对数据库运行查询并在Excel中显示良好。 Excel的过滤和数据透视表以及用户熟悉的界面等强大功能使其非常有用。但是,Microsoft Query的一个限制是您无法向无法以图形方式显示的查询添加参数,这极大地限制了您可以编写的SQL。

是否有任何错误解决方案“无法以图形方式显示的查询中不允许使用参数”?

4 个答案:

答案 0 :(得分:48)

Excel的SQL Server查询界面不允许您拥有自定义参数。解决此问题的方法是创建通用Microsoft Query,然后添加参数,然后将参数化查询粘贴到连接的属性中。以下是Excel 2010的详细步骤:

  1. 打开Excel
  2. 转到数据标签
  3. 来自其他来源按钮选择来自Microsoft Query
  4. 将出现“选择数据源”窗口。 选择数据源,然后点击确定
  5. 查询Qizard
    1. 选择列:将出现窗口。目标是创建一个通用查询。我建议从一张小桌子中选择一列。
    2. 过滤数据:只需点击下一步
    3. 即可
    4. 排序顺序:只需点击下一步
    5. 即可
    6. 完成:只需点击完成
  6. 将出现“导入数据”窗口:
    1. 点击属性... 按钮。
      1. 选择定义标签
      2. 在“命令文本:”部分添加包含Excel参数的WHERE子句。添加您现在想要的所有参数非常重要。例如,如果我想要两个参数,我可以添加它:
        WHERE 1 =?和2 =?
      3. 点击确定返回“导入数据”窗口
    2. 选择数据透视表
    3. 点击确定
  7. 系统将提示您输入每个参数的参数值。
  8. 输入参数后,您将进入数据透视表
  9. 转到数据标签,然后点击连接属性按钮
    1. 点击定义标签
    2. 在“命令文本:”部分中,使用您之前定义的相同参数数量粘贴所需的实际SQL查询
    3. 点击参数... 按钮
      1. 为每个参数输入提示值
      2. 点击确定
    4. 点击确定关闭属性窗口
  10. 恭喜,您现在有参数。

答案 1 :(得分:24)

简易解决方法(无需VBA)

  1. 右键单击表格,展开“表格”上下文菜单,选择“外部数据属性”
  2. 点击“连接属性”按钮(仅在工具提示中标记)
  3. 转到标签“定义”
  4. 从这里开始,通过添加'?'直接编辑SQL无论你想要什么参数。与以前一样工作,除非你没有被唠叨。

答案 2 :(得分:5)

如果您使用的是Excel 2007,则可以编写VBA来更改工作簿中的连接(即外部数据查询)并更新CommandText属性。如果您只是在需要参数的地方添加?,那么下次刷新数据时,它会提示您输入连接的值!魔法。当您查看“连接”的属性时,“参数”按钮现在将处于活动状态并且可以正常使用。

E.g。我编写了一个宏,在调试器中逐步执行它,并使其适当地设置CommandText。完成此操作后,您可以删除宏 - 它只是更新查询的一种方法。

Sub UpdateQuery
    Dim cn As WorkbookConnection
    Dim odbcCn As ODBCConnection, oledbCn As OLEDBConnection
    For Each cn In ThisWorkbook.Connections
        If cn.Type = xlConnectionTypeODBC Then
            Set odbcCn = cn.ODBCConnection

            ' If you do have multiple connections you would want to modify  
            ' the line below each time you run through the loop.
            odbcCn.CommandText = "select blah from someTable where blah like ?"

        ElseIf cn.Type = xlConnectionTypeOLEDB Then
            Set oledbCn = cn.OLEDBConnection
            oledbCn.CommandText = "select blah from someTable where blah like ?" 
        End If
    Next
End Sub

答案 3 :(得分:-1)

是 - 解决方案是将工作簿保存到XML文件(例如'XML Spreadsheet 2003')并在记事本中将此文件编辑为文本! 使用记事本的“搜索”功能查找查询文本并将数据更改为“?”。

在excel中保存并打开,尝试刷新数据,excel将对参数进行监控。