fir*_*ger 10 excel vba excel-2003 excel-vba
我正在使用Excel从SQL数据库中提取数据.我使用了另一个SO问题的代码,它运行正常.现在我想从实际表中除了表中的列名.我发现我可以使用For Each fld循环获取名称.然而,仍然存在在Excel中连续水平填充它们的问题,因为列的数量可能会改变 - 所以我认为我需要另一个对于每个循环也或类似的东西.
Sub GetDataFromADO()
'Declare variables'
Set objMyConn = New ADODB.Connection
Set objMyCmd = New ADODB.Command
Set objMyRecordset = New ADODB.Recordset
'Open Connection'
objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;User ID=abc;Password=abc;"
objMyConn.Open
'Set and Excecute SQL Command'
Set objMyCmd.ActiveConnection = objMyConn
objMyCmd.CommandText = "select * from myTable"
objMyCmd.CommandType = adCmdText
objMyCmd.Execute
'Loop Names'
' WHAT TO DO HERE????'
'Open Recordset'
Set objMyRecordset.ActiveConnection = objMyConn
objMyRecordset.Open objMyCmd
'Copy Data to Excel'
ActiveSheet.Range("A1").CopyFromRecordset (objMyRecordset)
End Sub
Run Code Online (Sandbox Code Playgroud)
小智 20
我通常的代码非常相似:
For intColIndex = 0 To objMyRecordset.Fields.Count - 1
Range("A4").Offset(0, intColIndex).Value = objMyRecordset.Fields(intColIndex).Name
Next
Run Code Online (Sandbox Code Playgroud)
fir*_*ger 12
好的,所以我在4次尝试后想出来,这是循环的代码.
'Loop'
Dim FieldRange As Range
Set FieldRange = Range("A4")
Set TableColumns = Range("A4:H4")
x = 1
Range("A4").Select
For Each fld in objMyRecordset.Fields
ActiveCell.Value = fld.Name
ActiveCell.Offset(0, x).Select
x = x + 1 'tick iterator
Next
ActiveSheet.Range("A5").CopyFromRecordset objMyRecordset
Range("A4").Select
Run Code Online (Sandbox Code Playgroud)
小智 6
为了使它变得非常简单,做这样的事情(使用Sheet1和recordset r)
For i = 0 To r.Fields.Count - 1
Sheet1.Cells(1, i + 1) = r.Fields(i).Name
Next i
Run Code Online (Sandbox Code Playgroud)