从单元格中包含的不同文件位置获取值 Excel
getting vales from different file locations contained in cells Excel
所以我尝试在 Excel 和单元格 M5 中创建一个跟踪文件,我有一个链接到支持文档的文件位置,因此包含一些重复的信息,所以我想尝试并从 M5 中引用的外部文件中提取某些字段(本例中为 B8)。
我已经尝试了 =([M5]Sheet1!B8)
,这在一定程度上有效,但这会弹出一个对话框,我必须手动 select 文件位置,这对于目的来说太手动了。
我也研究过使用 INDIRECT 函数,但不能保证两个文件会同时打开,所以如果可能的话我更喜欢其他选项。
如有任何建议,我们将不胜感激!!
可以在不打开外部文件的情况下从外部文件中获取数据。 Excel 要得到一个数据项,它需要知道:
- 文件位置
- 该位置文件的名称
- 该文件中工作表的名称
- 该工作表中单元格的地址
我们在某个单元格中输入所需的信息,比如单元格 C3,格式非常特殊:
'C:\TestFolder\[ABC.xls]xxx'!R9C2
注意单引号!
然后 运行 这个简短的宏:
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
宏非常易于安装和使用:
- ALT-F11 调出 VBE window
- ALT-I
ALT-M 打开一个新模块
- 粘贴内容并关闭 VBE window
如果您保存工作簿,宏也会随之保存。
如果您使用的 Excel 版本晚于 2003,则必须保存
文件为 .xlsm 而不是 .xlsx
删除宏:
- 如上所述调出 VBE window
- 清除代码
- 关闭 VBE window
要使用来自 Excel 的宏:
- ALT-F8
- Select宏
- 触摸运行
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
必须启用宏才能运行!
您可以使用以下公式从已关闭的工作簿中获取单个单元格值。
它是一个用户定义函数 (UDF),您可以这样称呼它:
=GetClosedCell(A3,B3,C3)
第一个参数是工作簿路径和名称。
第二个参数是工作表名称。
第三个参数是单元格的地址。
将此函数放在标准代码模块中:
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 和单元格 M5 中创建一个跟踪文件,我有一个链接到支持文档的文件位置,因此包含一些重复的信息,所以我想尝试并从 M5 中引用的外部文件中提取某些字段(本例中为 B8)。
我已经尝试了 =([M5]Sheet1!B8)
,这在一定程度上有效,但这会弹出一个对话框,我必须手动 select 文件位置,这对于目的来说太手动了。
我也研究过使用 INDIRECT 函数,但不能保证两个文件会同时打开,所以如果可能的话我更喜欢其他选项。
如有任何建议,我们将不胜感激!!
可以在不打开外部文件的情况下从外部文件中获取数据。 Excel 要得到一个数据项,它需要知道:
- 文件位置
- 该位置文件的名称
- 该文件中工作表的名称
- 该工作表中单元格的地址
我们在某个单元格中输入所需的信息,比如单元格 C3,格式非常特殊:
'C:\TestFolder\[ABC.xls]xxx'!R9C2
注意单引号!
然后 运行 这个简短的宏:
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
宏非常易于安装和使用:
- ALT-F11 调出 VBE window
- ALT-I ALT-M 打开一个新模块
- 粘贴内容并关闭 VBE window
如果您保存工作簿,宏也会随之保存。 如果您使用的 Excel 版本晚于 2003,则必须保存 文件为 .xlsm 而不是 .xlsx
删除宏:
- 如上所述调出 VBE window
- 清除代码
- 关闭 VBE window
要使用来自 Excel 的宏:
- ALT-F8
- Select宏
- 触摸运行
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
必须启用宏才能运行!
您可以使用以下公式从已关闭的工作簿中获取单个单元格值。
它是一个用户定义函数 (UDF),您可以这样称呼它:
=GetClosedCell(A3,B3,C3)
第一个参数是工作簿路径和名称。
第二个参数是工作表名称。
第三个参数是单元格的地址。
将此函数放在标准代码模块中:
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
这是它在工作表上的样子: