可能有一种更简单的方法来实现这一点,但我发现了3种方法可以用来将数据从单个单元格中的单个单元格中相对有效地关闭的Excel工作簿中拉出来(非常感谢John Muggins在他的帮助下这个)。
首先,workbooks.open
方法可以使用,并且如果您将只读参数设置为true,则运行速度会更快(我不确定这是否在技术上'打开'工作簿,但它绝对看起来在读取时运行得更快-只要)。这要求您设置对Excel库的引用。
Dim xlApp As Excel.Application
Dim src As Workbook
Set xlApp = CreateObject("Excel.Application")
Set src = xlApp.Workbooks.Open "C:\SaleLog.xls", True, True
然后你可以从使用普通的Excel VBA语法像这样
strUser = src.Worksheets("Sales").Range("B8")
src.Close False 'false doesn't save changes
Set src = Nothing
另一种方法是使用DoCmd.Transferspreadsheet
方法链接或导入一个单细胞,在这种情况下,你的特定细胞数据需要将HasFieldNames参数设置为false,如图所示
path = "C:\SaleLog.xls"
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "tblTemp", path, False, "Sales!B8:B8"
这将创建一个名为F1的单个字段的表。您可以使用DLookup或记录集获取存储在此表中的值(您可能希望删除临时表,例如DoCmd.DeleteObject acTable, "tblTemp"
)。
最后,您可以使用原始问题中提到的DAO连接。您可以指定一个特定的单元格,如下所示
Dim db as DAO.Database
Dim rsUsers as DAO.Recordset
Set db = OpenDatabase("C:\SaleLog.xls", False, True, "Excel 8.0;HDR=Yes;")
Set rsUsers = db.OpenRecordset("SELECT * FROM [Sales$B8:B8]")
再次,这将创建一个名为F1的单个字段的记录集。您可以通过使用rsUsers.Fields("F1")
得到这个字段的值每上述方法可以(通常是)用于从整个工作表或单元格区域中提取数据,但对这个问题的目的,我想以展示如何将它们用于从单个单元中提取数据。我没有测试它们的效率,但我怀疑它们之间的速度差别很大,所以最好使用最简单的方法。
如果有人知道如何调整任何这些方法,使他们更有效或有另一种方法共有请随意评论或添加新的答案:)
有关链接到电子表格作为链接表是什么? – Minty
https://www.mrexcel.com/forum/excel-questions/645172-visual-basic-applications-code-pulling-data-closed-workbook-wo-opening.html –
嗨@Minty,不幸的是,如上所述,数据没有像表格一样布置,所以我不能以这种方式链接到数据。 – Leroy