1

我每月从外部公司收到数据,需要将字段名称更改为序号。示例合同 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
4

1 回答 1

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 静默忽略所有错误。我认为您应该摆脱它并添加适当的错误处理程序代码块。

于 2013-03-09T18:10:49.247 回答