我尝试以编程方式重命名数据库中的所有列,以使用以下宏替换带下划线的空格:
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
我该如何解决这个问题?
答案 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