2010-08-22 4 views
3

J'essaie de créer une liste déroulante qui, en changeant la sélection de la liste d'options, lancera une requête qui insèrera les résultats de la requête dans la page. Voici ce que j'ai jusqu'à présent:Comment exécuter une requête SQL à partir d'Excel dans VBA lors de la modification d'une liste déroulante

Sub DropDown1_Change() 
    Dim dbConnect As String 
    Dim leagueCode As String 
    Dim leagueList As Range 
    Dim leagueVal As String 

    Dim TeamData As String 

    Set leagueList = Worksheets("Menu Choices").Range("A5:A10") 
    Set leagueVal = Worksheets("Menu Choices").Cell("B1").Value 

    leagueCode = Application.WorksheetFunction.Index(leagueList, leagueVal) 

    TeamData = "SELECT DISTINCT(Teams.teamID), name FROM Teams WHERE lgID = '" & leagueCode & "' & ORDER BY name ASC" 

    With Worksheets("Menu Choices").QueryTables.Add(Connection:=dbConnect, Destination:=Worksheets("Menu Choices").Range("D5")) 
     .CommandText = TeamData 
     .Name = "Team List Query" 
     .Refresh BackgroundQuery:=False 
    End With 

End Sub 

Qui a des suggestions pour le faire fonctionner? Merci d'avance!

+0

Qu'est-ce que dbConnect? Avez-vous vu http://msdn.microsoft.com/en-us/library/bb178808(office.12).aspx? Vous devriez changer la ligne leagueval pour lire: 'leagueVal = Worksheets (" Menu Choices "). Range (" B1 "). Value': Set est seulement utilisé avec des objets, pas des chaînes. Votre instruction SQL est également incorrecte. – Fionnuala

+0

Merci d'avoir saisi le numéro leagueVal, c'était juste un code de frustration et je ne l'ai pas remarqué quand je l'ai posté ici. dbConnect est utilisé pour transmettre la chaîne de connexion d'une autre fonction à la requête. Merci pour le lien - Je vais vérifier cela ce soir et voir si cela aide. Juste entrer dans ce genre de fonctionnalité avec VBA (et VBA en général) de sorte que vos commentaires sont très appréciés. – OpenDataAlex

Répondre

1

j'ai pu résoudre le problème en utilisant un code similaire à ce qui suit:

Sub createTeamList() 
    Dim cn As New ADODB.Connection 
    Dim rs As New ADODB.Recordset 

    Dim SQL As String 

    Dim inc As Integer 

    Dim topCell As Range 
    Dim leagueID As String 

    Dim leagueList As Range 
    Dim leagueChoice As Range 

    Set leagueList = Worksheets("Menu Choices").Range("A4:A9") 
    Set leagueChoice = Worksheets("Menu Choices").Range("B1") 

    leagueID = Application.WorksheetFunction.Index(leagueList, leagueChoice) 

    Set topCell = Worksheets("Menu Choices").Range("D4") 

    With topCell 
    Range(.Offset(1, 0), .Offset(0, 1).End(xlDown)).ClearContents 
    End With 

    With cn 
    .ConnectionString = "Data Source=" & ThisWorkbook.Path & "\lahman_57.mdb" 
    .Provider = "Microsoft Jet 4.0 OLE DB Provider" 
    .Open 
    End With 

    inc = 0 

    SQL = "SELECT teamID, name " _ 
     & "FROM Teams " _ 
     & "WHERE lgID = '" & leagueID & "' " _ 
     & "GROUP BY teamID, name " _ 
     & "ORDER BY name " 

    rs.Open SQL, cn 

    With rs 
     Do Until .EOF 

     topCell.Offset(inc, 0) = .Fields("teamID") 
     topCell.Offset(inc, 1) = .Fields("name") 
     inc = inc + 1 
     .MoveNext 
     Loop 
    End With 

    rs.Close 
    cn.Close 
End Sub