J'utilise Excel pour tirer des données d'un DB SQL. J'ai utilisé le code d'une autre question et cela fonctionne bien. Maintenant, je veux tirer dans les noms de colonne d'une table en plus de la table réelle. J'ai compris que je pouvais obtenir les noms à l'aide de la boucle de chaque fld. Cependant, il reste encore le problème de les peupler horizontalement d'une ligne d'Excel, car le nombre de colonnes pourrait changer - donc je pense que j'aurais besoin d'une autre pour chaque boucle également ou quelque chose de similaire.
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
4 Réponses :
OK Alors je l'ai compris après 4 tentatives, voici le code de la boucle.
'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
Vous n'avez pas besoin de sélectionner la cellule d'utiliser quelque chose comme plage ("A4"). Décalage (0, x) .value = fld.name code>
Mon code habituel est très similaire:
J'aime la "criblesse" de votre solution. Je viens de l'élargir un peu pour régler les en-têtes en gras.
Je suis déconcerté à l'absence d'une solution qui ne recourt pas à une boucle.
Pour le rendre super simple, faites quelque chose comme ceci (à l'aide de la feuille1 et de l'enregistrement R)
Vous pouvez simplement définir votre variable "x" sur 0, puis faire quelque chose comme: et cela facilitera un peu plus facile de lire ... :) P> p>
Cette réponse n'est-elle pas au lieu d'ADO?
Vous ne voulez pas que les en-têtes alignent les données? Les données commencent dans A1, mais vous semblez avoir réglé la plage d'en-tête sur A4.
Ouais tu as raison - mauvaise copie et coller de ma part.