以编程方式重命名访问中的列

时间:2014-03-27 17:45:58

标签: ms-access access-vba

我尝试以编程方式重命名数据库中的所有列,以使用以下宏替换带下划线的空格:

Option Compare Database

  Public Sub RenameFields(ByRef tdf As DAO.TableDef)
    Dim fld As DAO.Field
    Dim strFieldName As String
    Dim strNewName As String

    Debug.Print "==============================================" & vbCrLf & UCase(tdf.Name)
    For Each fld In tdf.Fields
      strFieldName = fld.Name
      strNewName = Replace(strFieldName, " ", "_")
      If strFieldName <> strNewName Then
         fld.Name = strNewName 'ERROR IS THROWN HERE
         Debug.Print tdf.Name & "." & strFieldName & "=>" & strNewName
      End If
    Next fld
    Set fld = Nothing
  End Sub

Public Sub DoRename()
  Dim tdf As DAO.TableDef

  For Each tdf In CurrentDb.TableDefs
       Call RenameFields(tdf)
  Next tdf
  Set tdf = Nothing
End Sub

当我运行DoRename()时,出现以下错误:

  

运行时错误&#39; 3033&#39;:

     

您没有必要的权限来使用&#39;对象类型   集团&#39;宾语。您是系统管理员还是创建者   此对象为您建立适当的权限。

我已启用数据库的所有权限,包括&#34;管理&#34;对于所有对象类型(数据库,表,查询,表单,报表,宏)。

请注意,以下代码行会抛出此错误:

fld.Name = strNewName

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您不应尝试重命名系统表字段。确保跳过那些名称以“MSys”开头的表。

如果TableDefs集合中仍然包含任何已删除的表,请不要费心重命名其字段。已删除表的名称以~为前缀。删除的表最终将被完全删除,但仍然无需在存在时重命名其字段。

If Not (tdf.Name Like "Msys*" Or tdf.Name Like "~*") Then
    Call RenameFields(tdf)
End If

答案 1 :(得分:1)

问题是该宏试图重命名系统表。为了解决这个问题,我重写了DoRename()函数,如下所示:

Public Sub DoRename()
  Dim tdf As DAO.TableDef

  For Each tdf In CurrentDb.TableDefs
       If InStr(tdf.Name, "MSys") = 0 Then
              Call RenameFields(tdf)
       End If
  Next tdf
  Set tdf = Nothing
End Sub