2

我有一个 Access 数据库,其中有近 200 个表,每个表大约有 150 个字段。我需要更改大部分字段名称并正在编写一些 VBA 代码以编程方式将名称更新为我分配的名称。问题是并非所有表都具有完全相同的字段(某些表中缺少某些字段)。有没有办法可以在代码中编写更改,但如果特定表中不存在特定字段的更改,则只需跳过该更改?

我使用的基本代码来自这个站点: http: //windowssecrets.com/forums/showthread.php/125845-Change-Field-name-in-Table-with-VBA

这是我的实际代码。我是 VBA 的新手,所以请温柔一点。

Option Compare Database
Option Explicit

Public Sub changeFieldName()

Dim db As DAO.Database
Dim table As DAO.TableDef

Set db = CurrentDb
For 
Set table = db.TableDefs("table")

table.Fields("Field1").Name = "name1"
table.Fields("Field2").Name = "name2"
if(IsNull(table.Fields("FieldDoesn'tExist").Name = "name")) Then End If

Set table = Nothing
Next    

db.Close
Set db = Nothing


MsgBox "Changed"

End Sub

“Then End If”语句不起作用,但我不知道在这里使用什么

谢谢你的帮助!
保罗

4

1 回答 1

4

我处理它的方法是将旧名称和新名称放入他们自己的名为 [NameMap] 的表中:

oldName   newName 
--------  --------
oldName1  newName1
oldName2  newName2

然后遍历该列表以应用名称更改。On Error Resume Next如果表没有名称与 [oldName] 值之一对应的字段,则该语句将允许例程继续

Option Compare Database
Option Explicit

Public Sub changeFieldNames()
    Dim cdb As DAO.Database, rst As DAO.Recordset, tbd As DAO.TableDef
    Set cdb = CurrentDb
    Set tbd = cdb.TableDefs("SampleTable")
    Set rst = cdb.OpenRecordset("SELECT oldName, newName FROM NameMap", dbOpenSnapshot)
    Do Until rst.EOF
        On Error Resume Next
        tbd.Fields(rst!oldName).Name = rst!newName
        On Error GoTo 0
        rst.MoveNext
    Loop
    rst.Close
    Set rst = Nothing
    Set tbd = Nothing
    Set cdb = Nothing
End Sub
于 2013-11-07T19:16:28.513 回答