我正在寻找一种在 Access 中更改字段名称的方法。
我正在通过宏从文本文件导入数据。然后我通过 crystal report 查看。现在,有时,报告需要读取我在字段 7 而不是字段 5 中导入的字段。所以我不想重组整个导入过程,因为我经常处理 500000-1,000,000 条记录的导入,并且从文本文件导入这么多记录每次大约需要 5-9 分钟。如果是这种情况,我真的宁愿只导入一次并切换字段名称。到目前为止,我只是右键单击重命名。
有没有办法让我单击宏并重命名 Field5 -> FieldTemp、Field7 -> Field5 和 FieldTemp -> Field7
最终我需要重命名 Field5 <-> Field7。有什么建议吗?
更新:我发现这但我不确定如何实现。它会像我想象的那样工作吗?如果是这样,我该如何让它工作?
答案1
您可以使用 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”
一步步
- 打开 Access 数据库并按ALT+F11调出 VBA 编辑器
- 在左侧窗格中右键单击数据库名称并插入模块
- 在右侧窗格中,粘贴上述代码并将其保存为例如
VBA swap module
跟随微软的指南如何使用 AutoKeys 快速执行代码
- 在“创建”选项卡上,单击“宏”(或“模块”下方的箭头,然后单击“宏”)
- 在“设计”选项卡上的“显示/隐藏”组中,单击“宏名称”以显示“宏名称”列
在“宏名称”列中,插入要分配操作的键
Macro Name Key or keyboard shortcut ^A or ^4 CTRL+A or CTRL+4 {F1} F1 ^{F1} CTRL+F1 +{F1} SHIFT+F1
- 在 Action 列中,添加按下键时运行的操作 RunCode
在参数列中,插入
swapFieldNames("table1", "field5", "field7")
或以任何您命名的模块。在这里,您还可以定义应该使用哪个表进行重命名以及应该交换哪些字段名称单击“保存”或按CTRL+S并将宏命名为“AutoKeys”。只有有了这个名字,Access 才会知道在重新打开时应该分配一个快捷键
暗示:不要混淆“宏”和“模块”这两个术语。对于 Access,宏与 VBA 没有任何关系,这一点你可能认为是这样的。VBA 函数和子例程被称为“模块”,而宏是一个容器,你可以在其中定义多个操作,例如“打开此表、筛选 XY 值并删除所有条目”