2017-01-30 2 views
1

Мне нужно написать VBA, который будет прокручивать 128 разных таблиц, которые связаны в моей базе данных доступа из 128 различных файлов excel, и берут данные и помещают их в одну таблицу. Каждая таблица такая же, как и другие TS. Я смог написать это:Цикл VBA, который будет считываться из разных таблиц

strSQL = "INSERT INTO Tbl_GTAS (SF133_Rpt_Line, LineDescription, LineAmt, 
TS) SELECT [75-XXXX-XXXX_NEW SF 133].F1, [75-XXXX-XXXX_NEW SF 133].F2, 
[75-XXXX-XXXX_NEW SF 133].F3, '75-XXXX-XXXX' AS TS FROM [75-XXXX-XXXX_NEW SF 133] 
GROUP BY [75-XXXX-XXXX_NEW SF 133].F1, [75-XXXX-XXXX_NEW SF 133].F2, 
[75-XXXX-XXXX_NEW SF 133].F3, '75-XXXX-XXXX';" 

Мне просто нужно как-то это сделать, и потяните за каждую из моих столов.

Все мои таблицы имеют одинаковое соглашение об именах с XX, XXXX или X после 75-. Любая помощь будет очень признательна!

Спасибо!

редактировать:

Полный код VBA:

Public Function GTAS() 

    Dim SBRLink2017 As DAO.Database 
    Set SBRLink2017 = CurrentDb 


    Dim delSQL As String 
    Dim updSQL As String 
    Dim str1SQL As String 

    DoCmd.SetWarnings False 

    delSQL = "DELETE tbl_GTAS.* FROM tbl_GTAS';" 

    DoCmd.RunSQL (delSQL) 

    str1SQL = "INSERT INTO Tbl_GTAS (SF133_Rpt_Line, LineDescription, LineAmt, TS) SELECT [75-XXXX-XXXX_NEW SF 133].F1, [75-XXXX-XXXX_NEW SF 133].F2, [75-XXXX-XXXX_NEW SF 133].F3, '75-XXXX-XXXX' AS TS FROM [75-XXXX-XXXX_NEW SF 133] GROUP BY [75-XXXX-XXXX_NEW SF 133].F1, [75-XXXX-XXXX_NEW SF 133].F2, [75-XXXX-XXXX_NEW SF 133].F3, '75-XXXX-XXXX';" 

    DoCmd.RunSQL str1SQL 

    updSQL = "UPDATE Tbl_GTAS SET Tbl_GTAS.TS_SF133_Rpt_Line = [TS] & '_' & [SF133_Rpt_Line];" 

    DoCmd.RunSQL (updSQL) 

    DoCmd.SetWarnings True 

End Function 

ответ

1

Непроверенные и перепроверить, что я включил все скобку по мере необходимости. Я думаю, что сделал:

Dim db As DAO.Database 
Dim tdf As DAO.TableDef 

Set db = CurrentDb 

For Each tdf In db.TableDefs 

    ' ignore system and temporary tables 
    If Not (tdf.Name Like "MSys*" Or tdf.Name Like "~*") Then 

     Dim sTable As String 
     sTable = tdf.Name 

     Dim strSQL 
     strSQL = "INSERT INTO Tbl_GTAS (SF133_Rpt_Line, LineDescription, LineAmt, TS)" & _ 
      "SELECT T.F1, T.F2,T.F3, '" & Replace(sTable, "_NEW SF 133", "") & "' AS TS " & _ 
      "FROM " & sTable & " AS T" & _ 
      "GROUP BY T.F1, T.F2, T.F3,'" & Replace(sTable, "_NEW SF 133", "") & "';" 

     'do what you will with SQL 

    End If 

Next 
+0

Я обновил сообщение, чтобы включить весь код, который я использую. Где это будет в этом коде? И у меня есть таблица со всеми указанными TS, я предполагаю, что мне нужно будет заменить sTable на это имя таблицы? БЛАГОДАРЯ!!!!!! – AF15

+0

@ AF15 - Это все дополнительные и отдельные вопросы от оригинала. Однако вы можете поместить этот цикл, где оператор 'str1SQL', как я вижу. Я понятия не имею, что означает «все перечисленные TS» *, поэтому я не могу вам помочь. –

+0

Это прекрасно и отлично работает. Один вопрос. Как мне получить его, чтобы вернуть только TS, а не часть «_New SF 133». Благодаря! – AF15

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