基于单元格的条件查询
Query with conditions based on cells
我正在尝试编写查询某些值的 VBA 代码。
我的 SQL 查询在 WHERE 语句中有两个条件。
B 列中的值在查询范围内,因此没有问题。
A列中的值是以数字开头的代码,但包含字母,应将其视为字符串本身以工作'6F3S';具体来说:database.columnA='6F3S'.
我的问题是我想将 sheet "Input_sheet" 单元格 D1 中的元素 6F3S 外包,以便用户可以根据需要用其他代码更改它。
到目前为止,这是我的代码:
Sub Query1()
Dim ValueCellD1 As String
ValueCellD1 = Worksheets("Input_Sheet").Range("D1").Value
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"FFFF;DSN=XXXXXXXXXXXX;", Destination:=Range("$A")).QueryTable
.CommandText = Array( _
"SELECT database.columnA, database.columnB, database.columnC" _
& Chr(13) & "" & Chr(10) & _
"FROM IMPALA.database database" _
& Chr(13) & "" & Chr(10) & _
"WHERE (database.columnA=ValueCellD1) AND (database.columnB='London')")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = True
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "YYYYYYYYYYYYYYYYY"
.Refresh BackgroundQuery:=False
End With
End Sub
我收到了
Run-time error '13': Type mismatch
当我尝试调试时,它出现在此处:
.CommandText = Array( _
"SELECT database.columnA, database.columnB, database.columnC" _
& Chr(13) & "" & Chr(10) & _
"FROM IMPALA.database database" _
& Chr(13) & "" & Chr(10) & _
"WHERE (database.columnA=ValueCellD1) AND (database.columnB='London')")
注意:我目前使用的是Excel2010
您需要从字符串中取出 ValueCellD1
,以便将其识别为变量。
.CommandText = Array( _
"SELECT database.columnA, database.columnB, database.columnC" _
& Chr(13) & "" & Chr(10) & _
"FROM IMPALA.database database" _
& Chr(13) & "" & Chr(10) & _
"WHERE (database.columnA='" & ValueCellD1 & "') AND (database.columnB='London')")
其实我不知道为什么要在字符串中插入 & Chr(13) & "" & Chr(10) &
。以下内容也应该有效:
.CommandText = Array( _
"SELECT database.columnA, database.columnB, database.columnC " _
"FROM IMPALA.database database " _
"WHERE (database.columnA='" & ValueCellD1 & "') AND (database.columnB='London')")
请注意,如果您将单元格值读入变量
ValueCellD1 = Worksheets("Input_Sheet").Range("D1").Value
并将其推送到您的 SQL 命令中而不验证单元格值,那么任何可以在 D1 中编辑单元格值的人都可以轻松攻击您的数据库和 运行 任何 SQL 命令他喜欢(例如删除它)。 永远不要相信用户输入。始终验证它。
我正在尝试编写查询某些值的 VBA 代码。
我的 SQL 查询在 WHERE 语句中有两个条件。
B 列中的值在查询范围内,因此没有问题。
A列中的值是以数字开头的代码,但包含字母,应将其视为字符串本身以工作'6F3S';具体来说:database.columnA='6F3S'.
我的问题是我想将 sheet "Input_sheet" 单元格 D1 中的元素 6F3S 外包,以便用户可以根据需要用其他代码更改它。
到目前为止,这是我的代码:
Sub Query1()
Dim ValueCellD1 As String
ValueCellD1 = Worksheets("Input_Sheet").Range("D1").Value
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"FFFF;DSN=XXXXXXXXXXXX;", Destination:=Range("$A")).QueryTable
.CommandText = Array( _
"SELECT database.columnA, database.columnB, database.columnC" _
& Chr(13) & "" & Chr(10) & _
"FROM IMPALA.database database" _
& Chr(13) & "" & Chr(10) & _
"WHERE (database.columnA=ValueCellD1) AND (database.columnB='London')")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = True
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "YYYYYYYYYYYYYYYYY"
.Refresh BackgroundQuery:=False
End With
End Sub
我收到了
Run-time error '13': Type mismatch
当我尝试调试时,它出现在此处:
.CommandText = Array( _
"SELECT database.columnA, database.columnB, database.columnC" _
& Chr(13) & "" & Chr(10) & _
"FROM IMPALA.database database" _
& Chr(13) & "" & Chr(10) & _
"WHERE (database.columnA=ValueCellD1) AND (database.columnB='London')")
注意:我目前使用的是Excel2010
您需要从字符串中取出 ValueCellD1
,以便将其识别为变量。
.CommandText = Array( _
"SELECT database.columnA, database.columnB, database.columnC" _
& Chr(13) & "" & Chr(10) & _
"FROM IMPALA.database database" _
& Chr(13) & "" & Chr(10) & _
"WHERE (database.columnA='" & ValueCellD1 & "') AND (database.columnB='London')")
其实我不知道为什么要在字符串中插入 & Chr(13) & "" & Chr(10) &
。以下内容也应该有效:
.CommandText = Array( _
"SELECT database.columnA, database.columnB, database.columnC " _
"FROM IMPALA.database database " _
"WHERE (database.columnA='" & ValueCellD1 & "') AND (database.columnB='London')")
请注意,如果您将单元格值读入变量
ValueCellD1 = Worksheets("Input_Sheet").Range("D1").Value
并将其推送到您的 SQL 命令中而不验证单元格值,那么任何可以在 D1 中编辑单元格值的人都可以轻松攻击您的数据库和 运行 任何 SQL 命令他喜欢(例如删除它)。 永远不要相信用户输入。始终验证它。