如何解决VBA 使用索引 对于这篇冗长的帖子,我深表歉意,但简而言之,我的问题是这个 (tldr):
对于这篇冗长的帖子,我深表歉意,但简而言之,我的问题是这个 (tldr):
如何通过索引而不是名称循环访问访问字段名称?
上下文: 我正在尝试从一堆来自各种不同来源的 Excel 工作表中为大量制造的塑料零件构建一个检查数据的 Access 数据库。我使用两个 Access 文件执行此操作:一个作为前端/UI(表单和宏),另一个作为后端(包含所需数据的表)。我的流程结构如下:
- 使用前端访问表单打开
msoFileDialogFilePicker
并选择一个 Excel 数据表以读取到我的后端访问表中。后端文件中存储数据的表取决于前端文件表单中的单选按钮选择。 - 宏从 Excel 工作表中读取数据,转置数据,并将其存储在原始数据文件末尾的新 dumpSheet 中。此 dumpSheet 中的每一行实际上都是其在相应后端 Access 表中的记录。数据实际上是使用
DAO.Database
和DAO.Recordset
读入后端访问表的。 - 使用每两周从公司获得的新检查数据重复此过程。
检验数据来自不同的来源,但可以针对同一个塑料部件,也可以针对不同部件。公司 + 部分的这种组合决定了哪些字段需要读入记录集中。例如,所有这些组合都会有不同的字段(每个组合都有自己的表),但是每个组合每两周都会有新的检查数据(因此需要一个 db):
- X 公司 + A 部分
- X 公司 + B 部分
- Y 公司 + A 部分
- Y 公司 + B 部分
以下是我目前如何在 Access 前端表单宏中进行设置的一般情况(do while
循环中列出的字段用于一个特定的公司 + 部件组合:
Set excelTemp = New Excel.Application
excelTemp.Visible = True
excelTemp.displayAlerts = True
Set trExcelWB = excelTemp.Workbooks.Open("myExcelData.xlsx") 'Picked from msoDialogFilePicker
Dim ws As Worksheet
Set ws = trExcelWB.Sheets(Sheets.Count)
Dim dbDump As DAO.Database
Set dbDump = DBEngine.Workspaces(0).OpenDatabase("backend-database.accdb")
Dim dumpTable as String
dumpTable = "myTableForDataInBackEndDB"
Dim tdf As DAO.TableDef
Set tdf = dbDump.TableDefs(dumpTable)
Dim rst As DAO.Recordset
Set rst = dbDump.OpenRecordset(Name:=dumpTable)
With rst
.AddNew
Dim n as Integer
n = 2
do while Len(ws.Cells(n,5).Value) > 0 '5th column of dumpSheet stores unique part IDs and governs end of my dataset on the dumpSheet
.AddNew
![Date of inspection] = ws.Cells(n,2).Value
![Date of Production] = ws.Cells(n,3).Value
![LOT] = ws.Cells(n,4).Value
![Serial] = ws.Cells(n,5).Value
![Part] = ws.Cells(n,6).Value
![Depth] = ws.Cells(n,7).Value
![Wall thickness] = ws.Cells(n,8).Value
.Update
n = n + 1
Loop
在我有的情况下,这很好用:
检验日期
生产日期
很多
系列
部分
深度
壁厚
问题:如果我能在我的 do while
循环中做这样的事情,我会很高兴:
do while Len(ws.Cells(n,5).Value) > 0
Dim col as Integer
For col = 2 To ws.UsedRange.Columns.Count
.AddNew
![dbDump.TableDefs(dumpTable).Fields(col - 1).Name] = ws.Cells(n,col).Value
Next col
.Update
n = n + 1
Loop
如果我在 VBA 中尝试此操作,我会收到一个错误消息,提示“未在集合中找到项目”,所以我知道此代码不起作用,但这是我在自己脑海中看到的工作方式。我特别困惑,因为我知道 dbDump.TableDefs(dumpTable).Fields(col - 1).Name
本身给了我想要的字段名称作为字符串,但我不知道如何在 {{ 1}} 来自此代码。
所以,再一次,正如我一开始(有点讨厌)用大字体写的那样:我该怎么做?我看了高低,不知道如何通过索引而不是名称循环遍历字段名称。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。