从单元格Excel中包含的不同文件位置获取值
所以我试图在Excel中创build一个跟踪文件,并在单元格M5中,我有一个文件位置链接到一个支持文件,因此,包含一些重复的信息,所以我想尝试和拉某些领域(本例中的B8 )从M5引用的外部文件中。
我已经尝试了=([M5]Sheet1!B8)
,它可以在一定程度上工作,但这会popup一个对话框,我不得不手动select手动文件位置。
我也研究过使用INDIRECT函数,但不能保证这两个文件将同时打开,所以如果可能的话,更喜欢另一个选项。
任何build议将非常感谢!
以下是可用于从封闭工作簿中获取单个单元格值的公式。
这是一个用户定义函数(UDF),你可以这样调用它:
=GetClosedCell(A3,B3,C3)
第一个参数是工作簿path和名称。
第二个参数是工作表名称。
第三个参数是单元格的地址。
把这个函数放在一个标准的代码模块中:
Public Function GetClosedCell(ByVal FileSpec$, ByVal SheetName$, ByVal RangeAddress$) Const CNX = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=[];Extended Properties=""Excel 12.0;imex=1;hdr=no;""" Const QRY = "SELECT * FROM [.$|:|]" On Error GoTo errorh RangeAddress = Range(RangeAddress)(1, 1).Address(0, 0) With CreateObject("adodb.recordset") .Open Replace(Replace(QRY, "|", RangeAddress), ".", SheetName), Replace(CNX, "[]", FileSpec) GetClosedCell = .Fields(0) End With Exit Function errorh: GetClosedCell = "ERROR: " & Err & " " & Err.Description End Function
以下是在工作表上的外观:
可以从外部文件抓取数据,而无需打开它。 对于Excel来获取数据项,它需要知道:
- 文件位置
- 该位置内文件的名称
- 该文件中的工作表的名称
- 该工作表中单元格的地址
我们将所需的信息input到某个单元格中,例如以非常特定的格式说出单元格C3 :
'C:\TestFolder\[ABC.xls]xxx'!R9C2
注意单引号!
然后运行这个短的macros:
Public Sub GrabData() Dim r1 As Range, r2 As Range Set r1 = Range("C3") Set r2 = Range("C4") r2.Value = ExecuteExcel4Macro(r1.Value) End Sub
将检索数据并将其放置在单元格C4中
macros很容易安装和使用:
- ALT-F11调出VBE窗口
- ALT-I ALT-M打开一个新的模块
- 粘贴东西,closuresVBE窗口
如果您保存该工作簿,该macros将与它一起保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx
要删除macros:
- 如上所示调出VBE窗口
- 清除代码
- closuresVBE窗口
从Excel使用macros:
- ALT-F8
- selectmacros
- 触摸RUN
要了解有关macros的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
macros必须启用这个工作!