可能有一種更簡單的方法來實現這一點,但我發現了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