Процедура VBA Change_Column_Name

Я просто пытаюсь написать функцию, которая изменяет имя столбца таблицы в 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

Я не уверен, что я делаю неправильно.

Заранее спасибо.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужно указать 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

Главное — использовать переменную базы данных, потому что объект Set tblDef = CurrentDb.TableDefs(Table) становится недействительным сразу после запуска строки.

Andre 30.07.2024 11:41
Ответ принят как подходящий

Дурак я.. Этот однострочник делает это:

Currentdb.Tabledefs(таблица).fields(старое_имя_столбца).имя = новое_имя_столбца

Другие вопросы по теме