擅长访问选择性行传输而不是整个电子表格

时间:2018-07-30 16:51:49

标签: excel vba excel-vba ms-access

我有使用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

0 个答案:

没有答案