VBA遍历Access中的表

时间:2018-10-25 10:58:53

标签: sql vba ms-access

我正在使用VBA自动创建一列,并在Access DB中的多个表中更新该列。我已经使代码工作了,但是我想使用循环使其动态化。当我进入一个循环时,代码会给我一条错误消息。如何使代码动态化? 例如,此代码有效,它在表(1234_CompanyA)中添加了列(ID),并用1234-E填充了该列。

Dim strDdl As String
strDdl = "ALTER TABLE 1234_CompanyA ADD COLUMN ID TEXT(255)"
CurrentProject.Connection.Execute strDdl

Dim strDdl2 As String
strDdl2 = "UPDATE [1234_CompanyA] SET [1234_CompanyA].[ID]=""1234-E"""
CurrentProject.Connection.Execute strDdl2

但是我想通过使用代码将表定义为对象来使代码成循环:

Dim tbl(3) As Object
Dim strDdl As String
Dim strDdl2 As String
Dim id(3) as String

tbl(1) = [1234_CompanyA]
tbl(2) = [1234_CompanyB]
tbl(3) = [1234_CompanyC]

id(1)= "1234-E"
id(2)= "5678-C"
id(3)= "9012-G"

For i = 1 To 3

    strDdl = "ALTER TABLE tbl(i) COLUMN ID TEXT(255)"
    CurrentProject.Connection.Execute strDdl

    strDdl2 = "UPDATE tbl(i) SET tbl(i).[ID]= id(1)"
    CurrentProject.Connection.Execute strDdl2

Next i

我如何使代码循环工作?

谢谢:)

1 个答案:

答案 0 :(得分:0)

您需要像这样创建命令:

Dim tbl(3) As Object
Dim strDdl As String
Dim strDdl2 As String
Dim id(3) As String

tbl(1) = "[1234_CompanyA]"
tbl(2) = "[1234_CompanyB]"
tbl(3) = "[1234_CompanyC]"

id(1) = "1234-E"
id(2) = "5678-C"
id(3) = "9012-G"

For i = 1 To 3

    strDdl = "ALTER TABLE " & tbl(i) & " COLUMN ID TEXT(255)"
    CurrentProject.Connection.Execute strDdl

    strDdl2 = "UPDATE " & tbl(i) & " SET " & tbl(i) & ".[ID] = '" & id(1) & "'"
    CurrentProject.Connection.Execute strDdl2

Next i

请注意,变量已被分解且未嵌入字符串中,并且引号已添加到tbl变量中。