Ms access 将从不同表中读取的VBA循环

Ms access 将从不同表中读取的VBA循环,ms-access,vba,Ms Access,Vba,我需要编写一个VBA,它将循环遍历128个不同的表,这些表从128个不同的excel文件链接到我的access数据库中,并将数据放在一个表中。每个表都是相同的,只是不同的TS。我能够写下: 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-XX

我需要编写一个VBA,它将循环遍历128个不同的表,这些表从128个不同的excel文件链接到我的access数据库中,并将数据放在一个表中。每个表都是相同的,只是不同的TS。我能够写下:

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';"
我只需要想办法把它拿到我的每一张桌子上

我所有的表都有相同的命名约定,在75-之后有XX、XXXX或X。 任何帮助都将不胜感激

谢谢

编辑:

完整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

未经测试,并根据需要仔细检查是否包含所有括号。我想我做到了:

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

我更新了我的帖子,包含了我正在使用的全部代码。这将进入代码的哪一部分?我有一个列出了所有TS的表,我想我需要用这个表名替换sTable?谢谢@AF15-这些都是与原始问题不同的附加问题。但是,您可以将此循环放置在
str1SQL
语句所在的位置,如我所见。我不知道“列出的所有TS”是什么意思,所以我不能帮你。这是完美的,效果很好。不过有一个问题。我如何让它只返回TS而不返回“_NewSF 133”部分。谢谢@AF15-
Replace(稳定,“\u新SF 133”,”)
Replace(tdf.Name,“\u新SF 133”,”)