2014-08-27 57 views
0

我正在使用下面的代码将MDB数据库中的表加载到Excel工作表中。我试图将表名称定义为变量并将其传递给查询,但我在下面的代码中出现错误。我如何在VBA中做到这一点?如何将表名称传递给VBA中的sql查询

Public Sub ReadMdb() 

    Dim cn As Object, rs As Object 
    Dim intColIndex As Integer 
    Dim DBFullName As String 
    Dim TargetRange As Range 

    DBFullName = Application.GetOpenFilename() 

    On Error GoTo Oops 

    Application.ScreenUpdating = False 

    Set TargetRange = Sheets("Sheet1").Range("A1") 

    Set cn = CreateObject("ADODB.Connection") 
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & DBFullName 
    Set rs = CreateObject("ADODB.Recordset") 

    Dim tableName As String 
    tableName = "Students" 

    rs.Open "SELECT * FROM tableName", cn, , , adCmdText 


    ' Write the field names 
    For intColIndex = 0 To rs.Fields.Count - 1 
    TargetRange.Offset(1, intColIndex).Value = rs.Fields(intColIndex).Name 
    Next 

    ' Write recordset 
    TargetRange.Offset(1, 0).CopyFromRecordset rs 

LetsContinue: 
    Application.ScreenUpdating = True 
    On Error Resume Next 
    rs.Close 
    Set rs = Nothing 
    cn.Close 
    Set cn = Nothing 
    On Error GoTo 0 
    Exit Sub 
Oops: 
    MsgBox "Error Description :" & Err.Description & vbCrLf & _ 
     "Error at line  :" & Erl & vbCrLf & _ 
     "Error Number  :" & Err.Number 
    Resume LetsContinue 


End Sub 

回答

6

你可以插入表名到SQL:

rs.Open "SELECT * FROM [" & tableName & "]", cn, , , adCmdText 
+0

非常感谢Mr.4DMonster。你拯救了我的一天。 – Vahid 2014-08-27 08:28:48

2

考虑到你返回所有行和所有列,你可以使用命令类型adCmdTable那么你不需要任何SQL你只需命名你想要的表格。

+0

谢谢,这对目前的问题是有意义的。 – Vahid 2014-08-27 09:03:57

相关问题