vba - 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
解决方案
推荐阅读
- javascript - Yii2中如何保存下拉列表和复选框列表
- laravel-5.7 - Laravel 5.7 工匠迁移
- java - 检查枚举类的唯一属性
- initialization - 像第一次运行一样重置 cygwin 环境
- javascript - 如何显示所有 YouTube 视频,并默认展开其说明?
- angular - 如何在表格单元格中添加多个值?
- object - 如何在c#中克隆静态类的静态变量
- php - Jwt 身份验证错误参数 3 传递给 Lcobucci\JWT\Signer\Hmac::doVerify()
- mongodb - MongoDB 推送用户在 mongodb 对象数组中提供的对象数组,这样不会有任何重复
- java - 覆盖类加载器“父优先”