Code pour récupérer des données d'oracle et excel envoyer les données qui a la même du nom de la cellule à différentes feuilles excel
Qui suit est le code VB pour récupérer des données de la base de données oracle pour excel.
La COLLABNAME onglet à partir de la table TABLE_NAME a 20 différents collaboration noms et je veux envoyer les données correspondant à chaque collaboration sur une autre feuille à partir de la feuille sheet1
Actuellement, je prévois d'écrire le même code 20 fois et extraire des données de différentes feuilles et le code est indiqué ci-dessous
CODE ACTUEL:
Sub Load_data()
Sheets("Sheet1").Select
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim col As Integer
Dim row As Integer
Dim Query As String
Dim mtxData As Variant
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.Open ( _
"User ID=USERID" & _
";Password=PASSWORD" & _
";Data Source=xx.xx.xx.xxx:xxxx/xxxx" & _
";Provider=OraOLEDB.Oracle")
rs.Open "select COLLABNAME,DATETIME,TOTALFLOWS from TABLE_NAME WHERE to_date(DATETIME, 'DDMMYYYY HH24:MI') BETWEEN case when to_char(sysdate, 'dd') > 7 then trunc(sysdate-7) else trunc(sysdate,'mm') end AND trunc(sysdate) AND COLLABNAME like 'COLLABNAME1' ORDER BY DATETIME ASC", cn
With Sheet1
col = 0
'First Row: names of columns
Do While col < rs.Fields.Count
.Cells(1, col + 1) = rs.Fields(col).Name
col = col + 1
Loop
mtxData = Application.Transpose(rs.GetRows)
.Range("A2").Resize(UBound(mtxData, 1) - LBound(mtxData, 1) + 1, UBound(mtxData, 2) - LBound(mtxData, 2) + 1) = mtxData
End With
rs.Close
rs.Open "select COLLABNAME,DATETIME,TOTALFLOWS from TABLE_NAME WHERE to_date(DATETIME, 'DDMMYYYY HH24:MI') BETWEEN case when to_char(sysdate, 'dd') > 7 then trunc(sysdate-7) else trunc(sysdate,'mm') end AND trunc(sysdate) AND COLLABNAME like 'COLLABNAME2' ORDER BY DATETIME ASC", cn
With Sheet2
col = 0
'First Row: names of columns
Do While col < rs.Fields.Count
.Cells(1, col + 1) = rs.Fields(col).Name
col = col + 1
Loop
mtxData = Application.Transpose(rs.GetRows)
.Range("A2").Resize(UBound(mtxData, 1) - LBound(mtxData, 1) + 1, UBound(mtxData, 2) - LBound(mtxData, 2) + 1) = mtxData
End With
rs.Close
End Sub
J'ai juste gardé le code pour seulement deux COLLABNAMES
Je veux ajouter une boucle qui contient COLLABNAME1, COLLABNAME2, COLLABNAME3, COLLABNAME4
...COLLABNAME20 de sorte que les données récupérées à 20 feuilles différentes à partir de la table TABLE_NAME qui diminue la longueur de code et d'être plus élégant
Merci d'avance
OriginalL'auteur user1292831 | 2012-03-29
Vous devez vous connecter pour publier un commentaire.
Il suffit de créer un nouveau Sous laquelle la partie commune.
Ce n'est pas testé le code, mais devrait fonctionner (ou vous pourriez avoir besoin pour corriger des problèmes mineurs).
EDIT:
Si le COLLABNAME est pas en format fixe, alors vous ne pouvez pas utiliser la Boucle. Dans ce cas, vous avez besoin d'appeler chacun d'entre eux individuellement.
Il sera dans le format:
par exemple
Ajouté le code ci-dessus. 🙂
Comment faire pour modifier l'instruction Select code, si je ne veux pas répéter rs.Ouvrir", sélectionnez COLLABNAME,DATETIME,TOTALFLOWS from TABLE_NAME where to_date(DATETIME, 'jj / mm / aaaa HH24:MI') ENTRE le boîtier lorsque to_char(sysdate, 'dd') > 7 trunc(sysdate-7) d'autre trunc(sysdate,'mm') end ET trunc(sysdate) ET COLLABNAME like '" & CollabName & "' ORDER BY DATETIME ASC", cn
Lorsque j'essaie d'exécuter la macro ses dire non VALIDE OU non QUALIFIÉS RÉFÉRENCE À CETTE LIGNE Private Sub Load_data_into_sheet(ws en tant Que Feuille de calcul, CollabName Comme une Chaîne de caractères, le cn, le ADODB.La connexion)
Avez-vous ajouté une référence à la bibliothèque d'ado dans l'éditeur VB?
OriginalL'auteur Pradeep Kumar
Si vous avez beaucoup de COLLABNAME et que vous voulez vraiment utiliser une boucle, vous pouvez utiliser une boucle par le chargement de la feuille de noms dans un tableau de chaînes, puis en boucle à travers.
OriginalL'auteur cadvena