excel - 如何将一个名称标签连接到 Access VBA 中的多行
问题描述
我正在将 Excel 文件读取到 Access 表中,但我坚持通过以下方式对表进行规范化:
ALPHA
3110 JOT01E000004506 okt.
3110 JOT01E000004506 nov.
3110 JOT01E000004506 dec.
---empty row --
BETA
3112 JOT01E000004506 okt.
3112 JOT01E000004506 nov.
3112 JOT01E000004506 dec.
对此:
ALPHA 3110 JOT01E000004506 okt.
ALPHA 3110 JOT01E000004506 nov.
ALPHA 3110 JOT01E000004506 dec.
BETA 3112 JOT01E000004506 okt.
BETA 3112 JOT01E000004506 nov.
BETA 3112 JOT01E000004506 dec.
解决方案
主要问题是 MS Access 将数据视为无序集,除非order by
在查询中使用子句另行指定。
因此,当将数据从外部文件导入 MS Access 表时,您不能依赖结果表中的记录顺序与源文件中的记录顺序相匹配。
因此,与您的情况一样,如果您的数据完全取决于在数据集中遇到某些标识符行的顺序,我建议使用 VBA 依次遍历 Excel 电子表格中的每一行,测试是否存在'identifier' 行并将其值分配给变量,然后将每个单独的记录添加到目标表中。
以下是此类计划的大纲草案:
Function ImportData(strXLS As String)
Dim dbsCdb As DAO.Database
Dim rstRs1 As DAO.Recordset
Dim xlsApp As Excel.Application
Dim lngRow As Long
Dim strTag As String
Dim strTmp As String
Set xlsApp = New Excel.Application
Set dbsCdb = CurrentDb
Set rstRs1 = dbsCdb.OpenRecordset("Table1")
With xlsApp
With .Workbooks.Open(strXLS)
With .Worksheets("Sheet1")
strTag = .Cells(1, 1)
lngRow = 2
Do Until strTag = vbNullString
strTmp = .Cells(lngRow, 1)
If strTmp = vbNullString Then
lngRow = lngRow + 1
strTag = .Cells(lngRow, 1)
Else
rstRs1.AddNew
rstRs1("Tag") = strTag
rstRs1("Field1") = .Cells(lngRow, 2)
rstRs1("Field2") = .Cells(lngRow, 3)
rstRs1("Field3") = .Cells(lngRow, 4)
rstRs1.Update
End If
lngRow = lngRow + 1
Loop
End With
.Close
End With
.Quit
End With
rstRs1.Close
Set rstRs1 = Nothing
Set dbsCdb = Nothing
Set xlsApp = Nothing
End Function
一些先决条件:
- 添加对的引用
Microsoft Excel ##.0 Object Library
- Excel 数据保存在名为
Sheet1
- 第一个“标签”出现在单元格中
A1
- 目标访问表被调用
Table1
- MS Access
Table1
包含 4 个字段:Tag
、Field1
、Field2
、Field3
。
提供 Excel 工作簿的路径,例如:
ImportData "C:\YourExcelFile.xlsx"
推荐阅读
- android - 如何在Android中每天早上9点从数据库中获取数据?
- bash - Bash 4.2 关联数组抛出“坏数组下标”错误
- git - Gvim/Git 插件错误 E492:不是编辑器命令:GitStatus
- apache-spark-sql - apache spark sql表覆盖问题
- python-3.x - 描述跨 AWS 区域的 RDS 快照
- r - 如何在 r 中拉伸直方图中的 y 轴,以使低值变得更加明显?
- python - 使用 odeint 输出值
- python - 从 Wagtail 2.7.1 迁移到 2.7.4 的问题
- reactjs - 在 reactjs 中,是否可以创建一个不重置内容状态的选项卡控件?
- angular - 使用 mat-* 元素时如何使用可扩展行示例修复此材料表