This site will look better if you upgrade to a browser that supports web standards.
Getting a cell value from a closed workbook using VBA involves opening the file, and reading from the workbook, worksheet and range objects. MVP John Walkenbach published a macro function using an Excel 4 macro statement that gets it much more quickly.
I modified it (very) slightly to be more Mac-friendly, using Application.PathSeparator rather than "\" or ":".
Note that this cannot be called from a worksheet cell. It can, however, be called from a worksheet event macro.
'*********************************************************
'Purpose: Get a value from an open or closed workbook.
'Inputs: sPath: Complete path to the workbook's directory
sFileName: workbook's file name, including extension
sSheetName: target sheet's tab name
sCellRef: target cells's address, A1-style
'Returns: Variant containing cell value or "filename not found"
'*********************************************************
Public Function GetCellValue(sPath As String, _
sFileName As String, _
sSheetName As String, _
sCellRef As String) As Variant
'Slightly modified from John Walkenbach's routine:
' http://j-walk.com/ss/excel/tips/tip82.htm
'by J.E. McGimpsey
' http://mcgimpsey.com/macoffice/excel/getcellvalue.html
'Retrieves a value from an open or closed workbook
Dim sArg As String
Dim sPathSep As String
sPathSep = Application.PathSeparator
If Right(sPath, 1) <> sPathSep Then sPath = sPath & sPathSep
'Make sure the file exists
If Dir(sPath & sFileName) = "" Then
GetCellValue = sfileName & " Not Found"
Exit Function
End If
'Create the argument
sArg = "'" & sPath & "[" & sFileName & "]" & sSheetName & "'!" & _
Range(sCellRef)(1).Address(ReferenceStyle:=xlR1C1)
'Execute an XLM macro
GetCellValue = ExecuteExcel4Macro(sArg)
End Function
This page last updated
© Copyright 2001 - 2004 McGimpsey and Associates. Except where noted, all code on this site may be distributed under the Gnu GPL. Acknowledgement is appreciated.