Я просто пытаюсь написать функцию, которая изменяет имя столбца таблицы в MS Access/VBA.
Вот код:
Private Sub Change_Col_Name(Table As String, OldColName As String, NewColName As String)
Dim tblDef As TableDef
Dim fldDef As Field
Set tblDef = CurrentDb.TableDefs(Table)
For Each fldDef In tblDef.Fields
If fldDef.Name = OldColName Then
fldDef.Name = NewColName
Exit For
End If
Next fldDef
tblDef.RefreshLink
CurrentDb.TableDefs.Refresh
End Sub
Я получаю ошибку 3420 «Объект недействителен или больше не установлен» для строки
For Each fldDef In tblDef.Fields
Я не уверен, что я делаю неправильно.
Заранее спасибо.
Вам нужно указать DAO, и вы не сможете работать со связанной таблицей. Так:
Public Sub Change_Col_Name(Table As String, OldColName As String, NewColName As String)
Dim Database As DAO.Database
Dim tblDef As DAO.TableDef
Dim fldDef As DAO.Field
Set Database = CurrentDb ' or and external (linked) database.
Set tblDef = Database.TableDefs(Table)
If tblDef.SourceTableName = "" Then
For Each fldDef In tblDef.Fields
If fldDef.Name = OldColName Then
fldDef.Name = NewColName
Exit For
End If
Next
End If
Set fldDef = Nothing
Set tblDef = Nothing
Set Database = Nothing
End Sub
Дурак я.. Этот однострочник делает это:
Currentdb.Tabledefs(таблица).fields(старое_имя_столбца).имя = новое_имя_столбца
Главное — использовать переменную базы данных, потому что объект
Set tblDef = CurrentDb.TableDefs(Table)
становится недействительным сразу после запуска строки.