Ms access Access VBA:在循环中创建的新表导致错误

Ms access Access VBA:在循环中创建的新表导致错误,ms-access,vba,Ms Access,Vba,我从一个表中获取字段行,并为每一行创建一个新表。新表的名称将与其对应的行相等 这是我的密码: Option Compare Database Public Function createTables() Dim db As DAO.Database Dim tdf As DAO.TableDef Dim rst As DAO.Recordset Dim fld As DAO.Field Dim strSQL As String strSQL

我从一个表中获取字段行,并为每一行创建一个新表。新表的名称将与其对应的行相等

这是我的密码:

Option Compare Database

Public Function createTables()

    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Dim rst As DAO.Recordset
    Dim fld As DAO.Field
    Dim strSQL As String

    strSQL = "Select SKUS from SKUS"
    Set db = CurrentDb()
    Set rst = db.OpenRecordset(strSQL)
    Set fld = rst.Fields("SKUS")

    'MsgBox fld.Value

    rst.MoveFirst
    Do While Not rst.EOF
        Set tdf = db.CreateTableDef(fld.Value)

        Set fld = tdf.CreateField("SKUS", dbText, 30)
        tdf.Fields.Append fld

        Set fld = tdf.CreateField("Count", dbInteger)
        tdf.Fields.Append fld

        db.TableDefs.Append tdf

        rst.MoveNext
    Loop

End Function
问题是,在代码的第一次迭代(创建第一个表)之后,它会给我一个指向该行的错误“无效操作”

...
Set tdf = db.CreateTableDef(fld.Value)
...
你认为这是为什么?我有一种感觉,因为我需要重新设置fld或rst,但我不确定

有人能帮我解决这个问题吗?
谢谢

您似乎没有从
rst
读取任何新元组,因此将使用相同的值重复调用
CreateTableDef
。尝试更改此选项:

[...]
Set fld = rst.Fields("SKUS")
rst.MoveFirst
Do While Not rst.EOF
    Set tdf = db.CreateTableDef(fld.Value)
[...]
为此:

[...]
rst.MoveFirst
Do While Not rst.EOF
    Set fld = rst.Fields("SKUS")
    Set tdf = db.CreateTableDef(fld.Value)
[...]

…如果您的目的是基于SKU表中的每个元组创建一个表。

哦,我的上帝,您是耶稣,工作得非常完美!在过去的几个小时里,我一直在努力解决这个问题!非常感谢。你为什么要这么做?这违反了数据规范化。