背景:
我正在使用Excel 2003
我有2个Excel文件(源,列表),其中一个基本上是我的源数据。第二个是我使用excel“导入外部数据”功能来获取第二张表中的数据。然后我使用modifiy查询允许我使用SQL查询我的数据并限制我正在显示的数据。
我的SQL查询:
SELECT *
FROM ['Master List$']
WHERE [Name] Like "Brent%";
我的问题是,我希望将单元格A1作为我查询的输入。所以在A1中我希望“Brent”替换第一个WHERE
条件。
我希望找到一些东西,我将能够更改一个单元格,并能够刷新单元格A1中的任何数据。
有人有想法吗?
感谢。
我的连接字符串是这样的:
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;
Data Source=C:\My Data\Master List\Master List.xls;
Mode=Share Deny Write;Extended Properties="HDR=YES;";
Jet OLEDB:System database="";Jet OLEDB:Registry Path="";
Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;
Jet OLEDB:Global Partial Bulk Ops=2;
Jet OLEDB:Global Bulk Transactions=1;
Jet OLEDB:New Database Password="";
Jet OLEDB:Create System Database=False;
Jet OLEDB:Encrypt Database=False;
Jet OLEDB:Don't Copy Locale on Compact=False;
Jet OLEDB:Compact Without Replica Repair=False;
Jet OLEDB:SFP=False
答案 0 :(得分:0)
您错误地在查询中省略了FROM
关键字。
因为您正在查询Excel工作簿,所以最好确保它已关闭;如果使用OLE DB,您应该知道the dreaded memory leak bug。还要注意Excel如何确定数据类型,这可能会让NULL
出现意外情况变得有些奇怪;更多详情请见Dick's Blog。
您尚未指定工作表,因此我假设它名为Sheet1
。
您的大部分连接字符串都由默认值组成,可以删除。
因为这是一个编程站点而你问的是Excel,所以VBA如何:
Sub ExcelExample()
Const CONN_STRING As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;" & _
"Data Source=C:\My Data\Master List\Master List.xls;" & _
"Mode=Share Deny Write;Extended Properties=""HDR=YES;"";" & _
"Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";" & _
"Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;" & _
"Jet OLEDB:Global Partial Bulk Ops=2;" & _
"Jet OLEDB:Global Bulk Transactions=1;" & _
"Jet OLEDB:New Database Password="""";" & _
"Jet OLEDB:Create System Database=False;" & _
"Jet OLEDB:Encrypt Database=False;" & _
"Jet OLEDB:Don't Copy Locale on Compact=False;" & _
"Jet OLEDB:Compact Without Replica Repair=False;" & _
"Jet OLEDB:SFP=False"""
Const SQL_TEXT As String = _
"SELECT * FROM ['Master List$'] WHERE [Name] Like ?;"
Dim cmd
Set cmd = CreateObject("ADODB.Command")
With cmd
.ActiveConnection = CONN_STRING
.CommandText = SQL_TEXT
Dim param
Set param = CreateObject("ADODB.Parameter")
With param
.Direction = 1 ' adParamInput
.Type = 202 ' adVarWChar
.Size = 255
.Attributes = 64 ' adParamNullable
.Value = ThisWorkbook.Worksheets("Sheet1").Range("A1").Value & "%"
End With
.Parameters.Append param
End With
Dim rs
Set rs = CreateObject("ADODB.Recordset")
With rs
Set .Source = cmd
.Open
' Do stuff with recordset...
End With
End Sub
更新
连接字符串的哪些部分无用?大部分!例如,默认用户是Admin,但Jet工作组文件为空字符串,因为Excel不使用Jet安全性。我认为可以在不改变行为的情况下减少连接字符串:
Const CONN_STRING As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\My Data\Master List\Master List.xls;" & _
"Extended Properties=""HDR=YES;"";"