【发布时间】:2019-08-06 22:54:21
【问题描述】:
我有两个 Excel 工作簿。一个有目标客户列表,另一个有销售数据表。我想使用 vba 并编写一个 sql 查询来获取特定客户的销售历史记录并将该销售历史记录移动到目标客户工作簿中的新 ListObject。最好的方法是什么?
我尝试了 OLEDB 连接,但我似乎无法让它工作,我什至不确定这是解决我的问题的最佳方法。
这是我目前拥有的代码示例。
Public Sub GetSales()
Dim targetList As String
'Get list of target customers
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
counter = Selection.Rows.Count
targetList = "'" & Range("A2").Value & "'"
For x = 2 To counter
targetList = targetList + ",'" + CStr(Range("A" & CStr(3)).Value) + "'"
Next x
'Query I want to run
'SalesData is the ListObject in the the Sales Data workbook
sqlQuery = "Select * From SalesData WHERE Customer IN " & targetList
With ActiveWorkbook.Connections("SalesData").OLEDBConnection
.BackgroundQuery = True
.CommandText = sqlQuery
.CommandType = xlCmdSql
.Connection = Array(something in here??)
.RefreshOnFileOpen = False
.SavePassword = False
.SourceConnectionFile = ""
.ServerCredentialsMethod = xlCredentialsMethodIntegrated
.AlwaysUseConnectionFile = False
End With
'Return the queried sales data into a list object _
'on a new sheet in the Target Customers workbook
ActiveWorkbook.Worksheets.Add().Name = "Sales History"
Worksheets("Sales History").Activate
With ActiveSheet.ListObjects.Add '(results of query)
.DisplayName = "SalesHistory"
End With
End Sub
【问题讨论】:
-
我想我可以附上我的工作簿,但我没有看到这样做的地方。
-
您首先需要设置连接和记录集对象,定义连接字符串以连接到该特定工作簿。在 Excel 数据选项卡 > 从其他来源 > 从 Microsoft Query > Excel 文件中。打开后,您可以选择要视为数据库的工作簿,一旦选择了所有表和行,您可以单击 SQL 按钮,它将为您提供要放入 VBA 的 SQL 字符串。
标签: excel vba oledbconnection listobject