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