从单元格Excel中包含的不同文件位置获取vales

时间:2015-09-12 12:20:54

标签: excel vba excel-vba formula

所以我试图在Excel和单元格M5中创建跟踪文件,我有一个链接到支持文档的文件位置,因此包含一些重复的信息,所以我想尝试拉出某些字段(在本例中为B8)来自M5中引用的外部文件。

我已经尝试了=([M5]Sheet1!B8),它在一定程度上起作用,但这会打开一个对话框,我必须手动选择文件位置,这对于此目的来说太过手册了。

我也研究过使用INDIRECT功能,但不能保证两个文件同时打开,所以如果可能的话,更喜欢其他选项。

任何建议都会非常感激!!

2 个答案:

答案 0 :(得分:1)

以下是可用于从已关闭的工作簿中获取单个单元格值的公式。

这是一个用户定义函数(UDF),您可以这样称呼它:

=GetClosedCell(A3,B3,C3)

第一个参数是工作簿路径和名称。

第二个参数是工作表名称。

第3个参数是单元格的地址。

将此功能放在标准代码模块中:

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

以下是工作表的外观:

enter image description here

答案 1 :(得分:0)

可以在不打开外部文件的情况下从外部文件中获取数据。要使Excel获取数据项,需要知道:

  1. 文件位置
  2. 该位置文件的名称
  3. 该文件中工作表的名称
  4. 该工作表中单元格的地址
  5. 我们在一些单元格中输入所需的信息,比如以非常特定的格式显示单元格 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

    宏非常易于安装和使用:

    1. ALT-F11调出VBE窗口
    2. ALT-I ALT-M打开了一个新模块
    3. 粘贴内容并关闭VBE窗口
    4. 如果保存工作簿,宏将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

      删除宏:

      1. 按上述方式调出VBE窗口
      2. 清除代码
      3. 关闭VBE窗口
      4. 要使用Excel中的宏:

        1. ALT-F8
        2. 选择宏
        3. 触碰RUN
        4. 要了解有关宏的更多信息,请参阅:

          http://www.mvps.org/dmcritchie/excel/getstarted.htm

          http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

          必须启用宏才能使其生效!