2014-08-27 5 views
0

Я использую приведенный ниже код для загрузки таблицы из базы данных MDB на листе Excel. Я пытаюсь определить имя таблицы как переменную и передать ее запросу, но я получаю сообщение об ошибке с кодом ниже. Как я могу сделать это в VBA?Как передать имя таблицы в sql-запрос в VBA

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

2

Учитывая ваши возвращающимся все строки и все столбцы, можно использовать тип команды adCmdTable то вам не нужен какой-либо SQL просто назовите нужную таблицу.

+0

Спасибо, что имеет смысл для текущей проблемы. – Vahid

Смежные вопросы