Excel formula how to concatenate string for external reference

后端 未结 1 575
无人及你
无人及你 2021-01-23 23:58

Say I have the following formula in a cell that reads the value of a cell from another work book

=\'c:\\temp\\[external book.xlsx]SheetX\'!$E$4

相关标签:
1条回答
  • EDIT: As the below won't work on a closed workbook, here is a clunky proof-of-concept of how you could do it with VBA (I imagine there are better ways of doing this):

    Sub ClosedWorkbook()
    
    Dim currSht As Worksheet
    Dim targetWbk As Workbook
    Dim Path As String
    
    ' Turn off updating
    Application.ScreenUpdating = False
    
    ' Set a reference to the current sheet
    Set currSht = ActiveWorkbook.ActiveSheet
    
    ' Get the value in the formula cell (A1 here, could be ActiveCell if in a loop, etc.)
    PathSheet = currSht.Range("A1").Value
    
    ' Split out the path - this is very clunky, more of a proof (?) of concept
    ' This is depends on the path being as you mentioned, and the IF block is to 
    ' check if the apostrophe is present in the cell (since it is the escape character,
    ' it is usually skipped)
    If Left(PathSheet, 1) = "'" Then
      Path = Replace(Mid(PathSheet, 2, InStr(PathSheet, "]") - 2), "[", "")
      Sheet = Mid(PathSheet, InStr(PathSheet, "]"))
      Sheet = Left(Sheet, Len(Sheet) - 2)
    Else
      Path = Replace(Mid(PathSheet, 1, InStr(PathSheet, "]") - 1), "[", "")
      Sheet = Mid(PathSheet, InStr(PathSheet, "]") + 1)
      Sheet = Left(Sheet, Len(Sheet) - 2)
    End If
    
    ' Open the target workbook
    Set targetWbk = Workbooks.Open(Path)
    
    ' Grab the value from E4 and drop it in a cell (D1 here, could be ActiveCell, etc.)
    MyValue = targetWbk.Sheets(Sheet).Range("E4").Value
    currSht.Range("D5").Value = MyValue
    
    ' Close the target
    targetWbk.Close
    
    Application.ScreenUpdating = True
    End Sub
    

    OLD WAY (doesn't work on closed workbooks)

    I believe this captures what you're looking for. In this example, cell A1 had my sheet path:

    'C:\temp\[externalworkbook.xlsx]Sheet1'!
    

    In cell B1 I have the formula:

    =INDIRECT(A1 & "$E$4")
    

    Which concatenates the sheet value with $E$4 in order to generate the full path, which is then turned into a value by INDIRECT. One thing to note: the apostrophe is an escape character, so depending on your data, you may have to account for it specially in your formula:

    =INDIRECT("'" & A1 & "$E$4")
    

    If you're using Excel 2007 or above, you could wrap it in an IFERROR formula to take out the guesswork:

    =IFERROR(INDIRECT(A1 & "$E$4"),INDIRECT("'" & A1 & "$E$4"))
    
    0 讨论(0)
提交回复
热议问题