我每月从外部公司接收数据,需要将字段名称更改为序号。示例合同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
答案 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以静默方式忽略所有错误。我认为你应该摆脱它,并添加一个适当的错误处理程序代码块。