【发布时间】:2017-05-16 11:30:08
【问题描述】:
我有一些封闭的 Excel 工作簿,我愿意在不打开它们的情况下使用 =INDEX(MATCH) 访问它们。
不幸的是,我想间接引用它们,因此基于我所在的当前工作表。
例如- 如果我在sheet -> then file path:
AAB -> 'C:\Users\vityata\Desktop\[AAB]Test'!$A:E
BBC -> 'C:\Users\vityata\Desktop\[BBC]Test'!$A:E
这似乎是一项微不足道的任务,但执行此类操作的唯一选择似乎如下:
- 打开工作表,然后使用
Indirect()(但我不想打开工作表) - 使用 VBA 代码(但它应该是可重用的,并且确实是最后的手段)
- 使用数据连接(我不想要)
- 使用
INDIRECT.EXT(但我不想要3.派对插件)
我在这里检查过类似的问题:How to referencing value in closed excel workbook by formula incl. variable sheetname? 但第一个解决方案过于复杂,无法做到。
有什么新想法或最佳实践吗?
更新 到目前为止,我已经通过 VBA 实现了以下目标(尽管我希望有一个非 VBA 解决方案):
Option Explicit
Public Sub VlookupClosedWb(Optional strLookFor As String = "Erteilung Baugenehmigung", _
Optional strSheet As String = "APF", _
Optional lngColIndex As Long = 2)
Dim strRange As String
strRange = "'" & ThisWorkbook.Path & "\[" & strSheet & ".xlsx]" & "Monatsbericht'!$A:$E"
ActiveCell.Formula = "=VLOOKUP(""" & strLookFor & """," & strRange & "," & lngColIndex & ",0)"
End Sub
Public Function fVlookupClosedWb(Optional strLookFor As String = "Erteilung Baugenehmigung", _
Optional strSheet As String = "APF", _
Optional lngColIndex As Long = 2)
Dim strRange As String
strRange = "'" & ThisWorkbook.Path & "\[" & strSheet & ".xlsx]" & "Monatsbericht'!$A:$E"
fVlookupClosedWb = WorksheetFunction.VLookup(""" & strLookFor & """, " & strRange & ", " & lngColIndex & ", 0)
End Function
长话短说 - Sub 按预期工作,在活动单元格中提供我想要的内容。该功能不起作用。任何想法如何使它工作?我想它不起作用,因为我滥用了一点WorksheetFunction.VLookup,但是如果不打开另一个工作簿,我就无法通过一个范围。想法?
【问题讨论】:
-
也许可以尝试根据链接的问题显示您的代码,以便其他人可以看到您所做的事情,并且可能能够发现您出错的地方。
-
@FreeMan - 刚刚完成。我不想与
VBA合作,这实际上是我最后的手段...... -
另外,您是否尝试过Choirbean 的答案中链接的“疯狂的方法”?看起来这可能对你有用。
-
@FreeMan - 试过了,但太复杂了。我宁愿开始打开文件并使用
Indirect解决问题,也不愿这样做。
标签: vba excel excel-formula