如何解决带有OLEDB的SQL字符串在VBA中给出错误1004
我想通过VBA宏将文本文件导入到excel过滤器中。当我在sql字符串中使用LIKE运算符时,出现错误1004。
我已经尝试将*
和%
用作通配符,并且将ALike
而不是Like
用作通配符,但是没有区别。
test_7.txt
946737295 9CE78280 FF 1 5 FF FF FF FF FF
946737295 9CE78280 C0 FF 0 0 0 0 FF FF
946737295 9CE68082 C0 4 0 FF FF FF FF FF
,宏为:
Sub import_txt()
Dim input_path As String
input_path = "C:\test_7.txt"
Dim strSql As Variant
strSql = "SELECT * FROM [test_7]" & _
" WHERE Column2 Like '*E7*' AND" & _
" Column4='FF'"
ActiveWorkbook.Queries.Add Name:="test_7",Formula:= _
"let" & " Origine = Csv.Document(File.Contents(""" & input_path & """),[Delimiter=""#(tab)"",Columns=10,Encoding=1252,QuoteStyle=QuoteStyle.None])," & " #""Modifica tipo"" = Table.TransformColumnTypes(Origine,{{""Column1"",type text},{""Column2"",{""Colum" & _
"n3"",{""Column4"",{""Column5"",{""Column6"",{""Column7"",{""Column8"",{""Column9"",{""Column10"",type text}})" & "in" & " #""Modifica tipo"""
ActiveWorkbook.Worksheets.Add
With ActiveSheet.ListObjects.Add(SourceType:=0,Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=test_7;Extended Properties=""""" _,Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array(strSql) 'Array("SELECT * FROM [test_7]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "test_7"
.Refresh BackgroundQuery:=False
End With
End Sub
解决方法
SQL语句不能与Power Query提供程序一起很好地工作。但是您可以通过与查询关联的公式完全实现所需的功能。
请参见以下示例:
Sub readTxt()
Dim Wb As Workbook
Dim Ws As Worksheet
Dim Conn As WorkbookConnection
Dim mFormula As String
Dim query As WorkbookQuery
Set Wb = ActiveWorkbook
Set Ws = Wb.ActiveSheet
mFormula = "let " & _
"Source = Csv.Document(File.Contents(""C:\Users\Loïc\Desktop\test\test.txt""),[Delimiter="";"",Encoding=65001,QuoteStyle=QuoteStyle.Csv])," & _
"#""Step1"" = Table.SelectRows(Source,each Text.Contains([Column2],""E7"") and [Column3] = ""FF"")" & _
"in #""Step1"""
Set query = Wb.Queries.Add("Test text",mFormula)
With Ws.ListObjects.Add(SourceType:=0,Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=" & "Test text" & ";Extended Properties=""""",Destination:=Ws.Range("A1"),XlListObjectHasHeaders:=xlYes).QueryTable
.CommandType = xlCmdSql
.AdjustColumnWidth = False
.ListObject.Name = "test"
.CommandText = "SELECT * FROM [" & "Test text" & "]"
.Refresh BackgroundQuery:=False
End With
End Sub
您可能想要添加一些错误处理机制(以防文件已经打开等),并在不再需要时删除与文本文件的连接。
您将找到Microsoft的Power Query M公式语言here的文档。
使用VBA帮助您建立M公式的最后一个技巧:使用宏记录器!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。