我有一个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”语句不起作用,但我不知道在这里使用什么
感谢您的帮助! 保罗
答案 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