我刚刚开始一个项目,需要我将多个Excel文件中的数据聚合到Access表中。棘手的部分是我的Excel数据不会在表格中,而是在像扫雷的扫雷中(你知道,地雷是随机放置的)。当然,这不是完全随机的......
每个Excel文件本质上都是包含预算信息和其他数据的项目的跟踪表单。作为FORM意味着它是在视觉上而不是逻辑上排列的。此外,数据跨越4个单独的工作表。
有没有人有任何建议可以有效地将这些数据导入Access?
假设:
1)每个excel文件只会成为Access中的一行数据。
2)每个excel文件都将被锁定,以便每次都在完全相同的单元格中输入数据
基于这些假设,我考虑创建一个隐藏的工作表,其中包含引用每个单独单元格的适当标头值,从而创建一个合并数据表。然后从Access我将创建一个宏,允许我选择所需的工作簿并从该隐藏表导入一个新记录。当然有很多关于如何从excel表导入一个或多个记录的信息,所以如果我必须创建一个虚拟表,那就这样吧。
我应该考虑的其他方法吗?任何可能简化我概述的步骤的技巧?
提前致谢!
答案 0 :(得分:0)
这似乎是一项相当直接的任务。正如您所解释的那样,您正在从每个文件中读取相同的单元格位置,因此我将跳过在Excel中创建隐藏工作表的想法。从架构的角度来看,我同意LS_Dev - 保持简单!你所需要的只是
上述三个方面都可以在一个Access VBA模块中整齐地完成
广告1。
Sub XLSProcessMulti()
Dim Idx As Long
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = True
.Title = "Pick one or more files"
.Filters.Add "Worksheets", "*.xl*", 1
If .Show = -1 Then
For Idx = 1 To .SelectedItems.Count
XLSProcessSingle .SelectedItems(Idx)
Next Idx
End If
End With
End Sub
ad 2。
Sub XLSProcessSingle(FileName As String)
' needs creation of a reference to [Microsoft Excel xx.y Object Library]
Dim WB As Excel.Workbook
Dim Idx As Long
Set WB = Excel.Workbooks.Open(FileName)
' dummy code here just to show a bit how the Excel object can be accessed
Debug.Print WB.Name
For Idx = 1 To WB.Worksheets.Count
Debug.Print WB.Worksheets(Idx).Name
Debug.Print WB.Worksheets(Idx).[A1] ' access a cell by its address enclosed in []
Next Idx
' read sheets, ranges etc. by name or position into local variables
' and store them in Access table(s)
' X = WB.Worksheets(1).[A1] ' by position
' Y = WB.Worksheets("MySecondSheet").[B2] ' by sheet name
' Z = WB.Worksheets(3).Range("MyNamedRange") ' single cell named range
' etc.
WB.Close
End Sub
广告3。
轮到你了:)