【问题标题】:Vlookup in VBA referencing to a closed workbookVBA中的Vlookup引用已关闭的工作簿
【发布时间】:2017-07-17 22:47:32
【问题描述】:

我想创建一个将字符串作为输入的函数,在 vlookup 中使用该字符串作为参数以从已关闭的工作簿中获取值。

当数据和字符串都在同一个工作表中时,以下代码有效:

Function get_value(inputString as String)

    Dim dataRange as Range

    Set dataRange = Range("A1:B4")

    get_value = Application.WorksheetFunction.Vlookup(inputString, dataRange, 2, False)

End Function

仅引用范围(如下面的代码)不起作用(我认为这是因为函数无法处理 Workbooks.Open 像 Subs)。

Set workbookVariable = Application.Workbooks.Open(path_to_file)

dataRange = workbookVariable.Sheets(1).Range("A1:B4")

我的表格(保存为“names.xls”,保存在桌面)如下所示:

           A       |        B
    1    Olivia    |       Spaghetti
    2    John      |       Steak
    3    Samuel    |       Rice
    4    Brian     |       Chicken

我想要一个函数调用,例如:

=get_value(A1) ,这将返回 A1 中名称的食物。

如何调整我的代码以便 get_value 也适用于其他工作簿?

【问题讨论】:

  • 这可能会给你一个想法,没有经过测试。在外部工作簿处于活动状态的情况下,从即时窗口中获取Thisworkbook.Path & Application.PathSeparator & Range("A1:B4").Address(External:=true) 的字符串。您可能需要其中的一部分并设置与该工作簿的连接。
  • 0m3r,不是同一个问题,我需要一个函数。

标签: vba excel


【解决方案1】:
Function auto_open()

Workbooks.Open ("C:\Users\bmartin598\desktop\name")

Workbooks("Book2").Activate 
'make this match the workbook this code is in

End Function



Function get_value(inputString As String)

Dim dataRange As Range

Dim workbookVariable As Workbook

Dim strVal As Variant

Set workbookVariable = Workbooks("name") 'change to match workbook name

Set dataRange = workbookVariable.Sheets(1).Range("A1:B4")

strVal = Workbooks("name").Sheets("Sheet1").Range(inputString).Value 
'make sure workbooks matches the name of your workbook

get_value = WorksheetFunction.VLookup(strVal, dataRange, 2, False)


End Function

Function auto_close()
Workbooks("name").Close
End Function

您可以将其用作解决方法。每当打开另一个工作簿并将其置于后台时,它都会自动打开另一个工作簿。当您关闭工作簿时,您正在参考工作簿中工作的工作簿也会关闭。

希望这会有所帮助。

【讨论】:

  • 还是不行,奇怪的是对你有用。我怀疑我的问题是由于 Functions 的限制造成的。(stackoverflow.com/questions/7693530/…)
  • 代码哪里出错了?还有你用的是什么版本的excel?
  • 函数返回#VALUE!对于任何输入。运行 Excel for Mac 15.33 (2017) 和 Excel 2010 (windows)。
  • @Renan 您能否提供您的整个代码,包括 get_value 函数从何处获取输入。使用我的我无法复制您的错误。
  • 更新了一个更能满足您需求的答案。希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多