VBA代码按顺序添加数字和数据行

Posted

技术标签:

【中文标题】VBA代码按顺序添加数字和数据行【英文标题】:VBA code to add number in sequence and rows of data 【发布时间】:2018-07-03 17:08:32 【问题描述】:

我正在将旧的 2010 Access 数据库转换为 Access 2016,该数据库最初是在 Access 2000 中构建的。我的客户表使用 autonumber 字段来生成 CustomerId 号码。

我使用此字段连接到我目前有 13,000 条记录的维修表。我无法在新数据库中维护该字段,因此我想是否可以将表导出到 Excel 文件,而不是按缺少的 ID 号顺序添加数字以及填充名称和地址字段以进行临时导入到新数据库,导入后我可以删除这些字段。

不知道有没有其他方法可以维护这个id。我使用旧 ID 字段名称导入了客户表,但访问权限不允许我使用此字段创建与新维修表的关系。

ID 编号从 1 变为 8,437,但电子表格中只有 7,884 条记录。

【问题讨论】:

这似乎是您想要在 Access 中而不是 Excel 中执行的操作类型。您是否尝试过制作相关表格的副本,按照您想要的方式编辑副本,重命名旧表格,然后将编辑后的副本重命名为原始名称? 您无法确定自动编号字段的值。不是将旧数据导入现有的新表,而是将旧表作为新表导入,包括结构和数据。这不是 VBA 的问题。 差距是被删除的记录。如果这是具有 int 主键和 identity 规范的 SQL Server,您将遇到完全相同的问题,这几乎是标准和最佳实践。在 SQL Server 中你可以set identity insert on;不确定 Access 是否有类似的东西,或者它是否允许您在 autonumber 列中插入值。 所以我四处询问,看来您可以在 Access 中使用普通 SQL 插入自动编号列(UI 不允许您这样做)。 只是为了添加一些东西 - 如果您开始插入然后取消,自动编号可能会有间隙。所有自动编号保证是您获得的密钥是唯一的,而不是连续的。如果你想要连续的序列,你需要别的东西。我会考虑使用计数表作为此类问题的一般解决方案。 OTOH,如果数字有意义(通常它们不应该!),它们可能不应该是一个自动编号。 【参考方案1】:

重新排序 ID 的最佳方法是利用“级联更新相关字段”。 你要做的就是

删除与您的表的所有关系 将 ID 字段更改为 Number - Long Integer 重新添加关系,强制级联更新 将所有索引移到一个大于当前最大 ID 的数字 从 1 开始重新编号 删除所有关系 删除 ID 字段 保存表格 将 ID 字段重新添加为自动增量 - 主键 重新添加关系

ReImcrementCustomerIDs:Sub

Option Compare Database
Option Explicit

Public Sub ReImcrementCustomerIDs(ByVal FirstIndex As Long)
    Dim rs As DAO.Recordset
    Dim db As Database
    Dim SQL As String
    Dim ID As Long
    Set db = CurrentDb

    SQL = "SELECT CustomerID FROM Customers ORDER BY CustomerID;"

    Set rs = db.OpenRecordset(SQL, dbOpenDynaset)

    Do While Not rs.EOF
        rs.Edit
        rs("CustomerID") = FirstIndex
        FirstIndex = FirstIndex + 1
        rs.Update
        rs.MoveNext
    Loop
End Sub

用法

ReImcrementCustomerIDs 50000
ReImcrementCustomerIDs 1

【讨论】:

以上是关于VBA代码按顺序添加数字和数据行的主要内容,如果未能解决你的问题,请参考以下文章

Excel用vba按先后顺序打开一个文件夹中的N个excel工作簿,运行一段宏程序后

vba 按顺序打开文件夹下含特定字符的工作簿

VBA Access - 按字母顺序排序列表框

用单词和数字按字母顺序排列字符串

Pandas按时间顺序重复行

在 For-Next 循环 vba 期间按顺序显示控件