我有在互联网上获得的(最终)代码。 这行代码在WHERE中给出了错误,因为它是文本:
strSQL = " SELECT [VENDAS$].[Data], [VENDAS$].[Vendedor], [VENDAS$].[Total]" & _
" FROM [VENDAS$] WHERE [VENDAS$].[Vendedor] = Murilo;"
用以下数字代替下面的数字不会引起错误:
strSQL = " SELECT [VENDAS$].[Data], [VENDAS$].[Vendedor], [VENDAS$].[Total]" & _
" FROM [VENDAS$] WHERE [VENDAS$].[Total] >= 100000;"
然后我问:您最后需要这个分号吗?
这是完整的代码,我还问: 是否需要在代码末尾为变量conn,rst和fld设置Nothing? 要运行完整代码,我需要添加一些库吗?
Sub RunSQL()
On Error GoTo ErrHandle
Dim conn As Object, rst As Object
Dim strConnection As String, strSQL As String
Dim wkCaminho, wkArquivo As String
Dim I As Integer
Dim fld As Object
Set conn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
wkCaminho = ThisWorkbook.Path & "\"
wkArquivo = "MATRIZ DE DADOS.xlsx"
ActiveSheet.Cells.Delete
' Hard code database location and name
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" _
& "Data Source='" & wkCaminho & wkArquivo & "';" _
& "Extended Properties=""Excel 8.0;HDR=YES;"";"
' strSQL = " SELECT [VENDAS$].[Data], [VENDAS$].[Vendedor], [VENDAS$].[Total]" & _
' " FROM [VENDAS$] WHERE [VENDAS$].[Total] >= 100000;"
strSQL = " SELECT [VENDAS$].[Data], [VENDAS$].[Vendedor], [VENDAS$].[Total]" & _
" FROM [VENDAS$] WHERE [VENDAS$].[Vendedor] = Murilo;"
' Open the db connection
conn.Open strConnection
rst.Open strSQL, conn
' column headers
I = 0
Worksheets("Results").Range("A1").Activate
For Each fld In rst.Fields
ActiveCell.Offset(0, I) = fld.Name
I = I + 1
Next fld
' data rows
Worksheets("Results").Range("A2").CopyFromRecordset rst
rst.Close
conn.Close
MsgBox "Successfully ran SQL query!", vbInformation
Exit Sub
ErrHandle:
MsgBox Err.Number & " = " & Err.Description, vbCritical
Exit Sub
End Sub
答案 0 :(得分:2)
...WHERE [VENDAS$].[Vendedor] = Murilo;"
应该是
...WHERE [VENDAS$].[Vendedor] = 'Murilo'"
非数字字段需要在值两边加上引号。
我通常会省略分号-如果发现包含分号,我会发现它是一个问题,但在将其排除在外时我从未遇到任何问题。