我在SQL中查询了6行的固定数据集。我想将此查询中的数据传输到Excel中。我的问题分为两部分:
1 - 我可以一次退回多列,还是必须逐列?我有17列和6行。当这被转移到我的Excel模板中时,我希望将其分解为三分之一,因此第1列到第7列在另一部分中的一个空格8到11中以及在Excel中的另一部分中的12到17中。
2 - 使用我当前的代码:
Range("F2").Value = rst.Fields("ACCOUNT")
我只撤回一行,是否可以获取整列(全部6行)或者我是否必须循环所有6行以获得完整列?
提前致谢
答案 0 :(得分:0)
使用.GetRows()
method,它允许设置要检索的记录数,要开始的第一个记录,单个字段名称或序号位置,或字段名称或序号位置数组。
以下示例显示如何将外部Excel工作簿中的数据导入记录集,将指定字段检索到数组中,以及将结果数组粘贴到工作表中。
Option Explicit
Sub Test()
Dim sConnection As String
Dim sQuery As String
Dim oConnection As Object
Dim oRecordset As Object
Dim aData()
sConnection = _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"User ID=Admin;" & _
"Data Source='" & ThisWorkbook.FullName & "';" & _
"Mode=Read;" & _
"Extended Properties=""Excel 12.0 Macro;"";"
sQuery = _
"SELECT * FROM [Sheet1$] " & _
"IN '" & ThisWorkbook.Path & "\Src1.xlsx' " & _
"[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;'] " & _
"WHERE Country='UK';"
Set oConnection = CreateObject("ADODB.Connection")
oConnection.Open sConnection
Set oRecordset = oConnection.Execute(sQuery)
oRecordset.MoveFirst
aData = oRecordset.GetRows(, , Array("CustomerID", "ContactName"))
With ThisWorkbook.Sheets(1)
.Cells.Delete
Output2DArray .Cells(1, 1), WorksheetFunction.Transpose(aData)
.Cells.EntireColumn.AutoFit
End With
oConnection.Close
End Sub
Sub Output2DArray(oDstRng As Range, aCells As Variant)
With oDstRng
.Parent.Select
With .Resize( _
UBound(aCells, 1) - LBound(aCells, 1) + 1, _
UBound(aCells, 2) - LBound(aCells, 2) + 1)
.NumberFormat = "@"
.Value = aCells
End With
End With
End Sub
此外,Src1.xlsx
工作簿中包含Customers作为与此工作簿位于同一文件夹中的数据源:
生成的工作表如下,您只能看到CustomerID
和ContactName
字段: