2010-08-22 49 views
3

我试图创建一个下拉列表,当从选项列表中更改选择后,将运行将查询结果插入页面的查询。这是我到目前为止:如何在VBA中的Excel中从Excel中运行SQL查询更改下拉列表

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 

任何有任何建议让它工作?提前致谢!

+0

什么是数据库连接?你见过http://msdn.microsoft.com/en-us/library/bb178808(office.12).aspx?你应该改变联赛的版本号为:'leagueVal = Worksheets(“Menu Choices”)。Range(“B1”)。Value:Set仅用于对象,不用于字符串。你的SQL语句也是不正确的。 – Fionnuala 2010-08-22 20:39:37

+0

感谢您收到leagueVal问题,那只是沮丧的代码,当我把它发布在这里时我没有抓到它。 dbConnect用于将连接字符串从另一个函数传递到查询。 感谢您的链接 - 今晚我会检查一下,看看是否有帮助。进入VBA的这种功能(和一般的VBA),所以你的意见非常感谢。 – OpenDataAlex 2010-08-23 13:40:29

回答

1

我能解决您在使用类似的代码如下问题:

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 
相关问题