首页 > 解决方案 > excel 访问选择性行传输而不是整个电子表格

问题描述

我有使用 Excel 的经验,但没有太多的访问权限。我正在尝试创建一个“数据库”,其中来自许多工作簿的大量类似数据一起保存在 MS-Access 的一个文件中。

所有工作簿都由许多工作表组成,但它们都包含一个“数据”工作表,其中数据与来自同一工作簿中所有其他工作表的宏一起插入。

该数据表对于所有工作簿都是相同的,由从单元格 A1 开始一直到 BL1 的标题组成。数据从 A3 开始插入(所以从 A3 到 BL3)。数据以宏为一整行插入(A3-BL3 一起)。

目前:

我目前使用的代码如下,它传输在计时器上设置的整个工作表(每 12 小时),但我正在努力寻找更好的解决方案来实现我的目标。

目前的问题: 1)太慢了,我有超过 10,000 行数据,每 12 小时传输整个工作表不是最快或最好的方法(我真的不喜欢这样做)。2) Excel 工作簿始终处于打开状态并正在使用中,因此当计时器启动并运行 Excel-to-Access 宏时,这可能会导致用户混淆和/或崩溃(我什至不希望用户知道这个访问数据库)

目标:

让这个宏从 Excel 运行,每次在数据工作表(A6-BL6)中创建新数据行,并将其插入到 access 数据库表中而不删除任何其他内容(基本上每次新行数据时插入 access 1 行是在 excel 的数据工作表中创建的。我希望它在访问时将旧数据下推,以便保留所有内容,并且不会覆盖或丢失任何内容。

至关重要的是,我从 excel 运行宏而不是访问(甚至不希望其他用户可以访问或打开访问,只希望数据存储在那里)

Excel 和 Access 都是 2016。

如果有人可以请帮助和/或给我建议,我将不胜感激,已经做了一些研究,但还没有找到任何可以完全解决我的问题的东西。

Option Explicit

Sub AccImport()
Application.OnTime Now + TimeValue("12:00"), "AccImport"
Dim acc As New Access.Application
acc.OpenCurrentDatabase "C:\Users\yilly1\Desktop\Database.accdb"
acc.DoCmd.TransferSpreadsheet _
        TransferType:=acImport, _
        SpreadSheetType:=acSpreadsheetTypeExcel12Xml, _
        TableName:="Workbook1", _
        Filename:=Application.ActiveWorkbook.FullName, _
        HasFieldNames:=True, _
        Range:="Data1$A1:BL60000"
acc.CloseCurrentDatabase
acc.Quit
Set acc = Nothing
End Sub

标签: vbaexcelms-access

解决方案


推荐阅读