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

Ror*_*ory 36 excel vba excel-2007 ms-query

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

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

beh*_*nji 52

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

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


小智 24

简易解决方法(无需VBA)

  1. 右键单击表,展开"表"上下文菜单,选择"外部数据属性"
  2. 单击"连接属性"按钮(仅在工具提示中标记)
  3. 转到标签"定义"

从这里,通过添加'?'直接编辑SQL 无论你想要什么参数.工作方式和以前一样,除非你没有被唠叨.

  • 谢谢!这是一个很好的解决方案---快速,简单,无唠叨,并允许直接选择将保存参数的Excel单元格.**我认为这应该是接受的答案** (2认同)

Ror*_*ory 5

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

例如,我将编写一个宏,在调试器中逐步执行它,并使其适当地设置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
Run Code Online (Sandbox Code Playgroud)