使用vba更改访问2007中的字段名称

时间:2013-03-06 21:03:10

标签: ms-access access-vba

我每月从外部公司接收数据,需要将字段名称更改为序号。示例合同11 15 17到1 2 3.我试图使用以下代码,但得到一个错误,我无法在“fld.Name =(n)+ 1”处多次定义该字段。我怎么能纠正这个?

Function ChangeFieldName()

Dim db As DAO.Database
Dim tbl As DAO.TableDef
Dim fld As DAO.Field
Dim n As Integer

Set db = CurrentDb
Set tbl = db.TableDefs("tdf1")

On Error Resume Next

n = 0
For Each fld In tbl.Fields
    fld.Name = (n) + 1
Next fld

Set fld = Nothing
Set tbl = Nothing
Set db = Nothing

End Function

1 个答案:

答案 0 :(得分:1)

该代码尝试将每个字段重命名为n + 1,但由于n永远不会增加,因此它实际上会尝试将每个字段重命名为1。以下更改可以执行您想要的操作。

n = 1
For Each fld In tbl.Fields
    fld.Name = n
    n = n + 1
Next fld

但是,您应该考虑采用这种方法的其他一些问题。 For Each根据fld.OrdinalPosition循环显示字段。如果您的编号字段名称未按预期顺序定义,则会出现问题。例如,OrdinalPostion顺序中的这些字段:11; 15; 2.在这种情况下,11将重命名为1,但在尝试将15重命名为2时,代码会抛出错误。

此代码也会尝试将每个字段重命名为一个数字。如果表只包含编号的字段名称,那可能不是问题。但如果该表还包含您希望保留的其他字段名称,那么您还有更多工作要做。

一个小问题是fld.Name是文本类型。当您尝试将字段重命名为数字时,Access实际上使用该数字的字符串等效项。这可能没问题,但我更愿意自己明确地将数字转换为字符串。

fld.Name = CStr(n)

最后请重新考虑一下......

On Error Resume Next

指示Access以静默方式忽略所有错误。我认为你应该摆脱它,并添加一个适当的错误处理程序代码块。