重写多个表中的字段名称 - 跳过缺少的字段

时间:2013-11-07 18:35:18

标签: vba ms-access scripting access-vba

我有一个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”语句不起作用,但我不知道在这里使用什么

感谢您的帮助! 保罗

1 个答案:

答案 0 :(得分:4)

我接近它的方法是将旧名称和新名称放入名为[NameMap]的表中:

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

然后遍历该列表以应用名称更改。如果表没有名称与[oldName]值之一相对应的字段

On Error Resume Next语句将允许例程继续
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