2

Я ищу способ изменить имена полей в Access.

Я импортирую данные через макрос, из текстовых файлов. Который я тогда рассматриваю через кристаллический отчет. Теперь иногда в отчете нужно прочитать поле, которое я импортировал в поле 7 вместо поля 5. Поэтому я не хочу реструктурировать весь процесс импорта, потому что я часто работаю над импортом для 500 000-1 000 000 записей, и импорт такого количества записей из текстового файла занимает около 5-9 минут каждая. Я бы предпочел выполнить импорт один раз и поменять имена полей, если это один из таких случаев. До сих пор я только что переименовал правой кнопкой мыши.

Есть ли способ для меня, чтобы щелкнуть макрос и переименовать Field5 -> FieldTemp, Field7 -> Field5 и FieldTemp -> Field7

В конечном итоге мне нужно переименовать Field5 <-> Field7. Предложения?

ОБНОВЛЕНИЕ: я нашел это, но я не уверен, как осуществить это. Будет ли это работать так, как я думаю? Если так, как мне заставить это работать?

1 ответ1

2

Вы можете сделать это с помощью VBA и сочетания клавиш, назначенного вашему коду.

Public Function swapFieldNames(table, name1, name2)

    '## Close & save the table in case its open or else you can't rename fields
    DoCmd.Close acTable, CurrentDb().TableDefs(table).Name, acSaveYes

    '## Save all touched field names to temporarily variables for later use
    temp1 = CurrentDb().TableDefs(table).Fields(name1).Name
    temp2 = CurrentDb().TableDefs(table).Fields(name2).Name

    '## Rename them to unique names because duplicate names are not allowed
    CurrentDb().TableDefs(table).Fields(name1).Name = "#$%temp1%$#"
    CurrentDb().TableDefs(table).Fields(name2).Name = "#$%temp2%$#"

    '## Rename them again and do the switch
    CurrentDb().TableDefs(table).Fields("#$%temp1%$#").Name = temp2
    CurrentDb().TableDefs(table).Fields("#$%temp2%$#").Name = temp1

    '## Open the table to view the result
    DoCmd.OpenTable CurrentDb().TableDefs(table).Name

End Function

Я загрузил демонстрационную базу данных, где вы можете нажать F3, чтобы поменять местами имена полей "field5" и "field7"

Шаг за шагом

  1. Откройте базу данных Access и нажмите ALT+F11, чтобы открыть редактор VBA.
  2. На левой панели щелкните правой кнопкой мыши на имени вашей базы данных и вставьте модуль
  3. На правой панели вставьте приведенный выше код и сохраните его, например, как VBA swap module
  4. Следуйте инструкциям Microsoft по использованию AutoKeys для быстрого выполнения кода.

    • На вкладке "Создать" нажмите "Макрос" (или стрелку под "Модуль", а затем "Макрос").
    • На вкладке "Дизайн" в группе «Показать / Скрыть» щелкните "Имена макросов", чтобы отобразить столбец "Имя макроса".
    • В столбце "Имя макроса" вставьте ключ, которому вы хотите назначить действие

      Macro Name      Key or keyboard shortcut
      ^A or ^4        CTRL+A or CTRL+4
      {F1}            F1
      ^{F1}           CTRL+F1
      +{F1}           SHIFT+F1
      
    • В столбце "Действие" добавьте код RunCode, который запускается при нажатии клавиши.
    • В столбце "Аргументы" вставьте swapFieldNames("table1", "field5", "field7") или как бы вы ни назвали свой модуль. Здесь вы также определяете, какую таблицу следует использовать для переименования и какие имена полей следует поменять местами.

    • Нажмите Сохранить или нажмите CTRL+S и назовите макрос "AutoKeys". Только с этим именем Access будет знать, что он должен назначить ярлык при повторном открытии


Подсказка: не путайте термины "макрос" и "модуль". Для Access макрос не имеет ничего общего с VBA, как вы можете подумать. Функции и подпрограммы VBA называются "модулями", а макросы представляют собой контейнер, в котором можно определить несколько действий, таких как «открыть эту таблицу, отфильтровать значение XY и удалить все записи».

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .