2011-12-14 190 views
1

我尝试了几个小时的例子,但我总是得到#NAME的错误?在Excel 2007 VBA功能中使用VLOOKUP

我需要在VBA函数中使用VLOOKUP,然后在将结果放入单元格之前处理结果。首先,我只是为了让VBA VLOOKUP部件工作而遇到问题。

为了测试这里是细节 电子表格是...

工作表= Sheet 1中

4行数据的×2列。 细胞D1:E4 舞蹈:23 法语:42 英文:2 音乐:33

在单元格A1我将有一个用户估算的内容,将来自塔d例如法语

在小区A中的值B1我会调用函数 = GetQty(A1,D1:E4,2) 但我总是得到#NAME?

1)如何正确调用功能。我是否正确地做这件事?

在我的VBA函数“GetQty”中,我只想对单元格A1的值执行VLOOKUP,并从表格中匹配的条目返回值(单元格D1:E4),例如返回42,然后将该值到列B1和(也列C1通过VBA,而不仅仅使用工作表单元格中的公式= B1)

下面是我尝试使用VLOOKUP工作的许多示例中的一个。

Function GetQty(Celly As Range, CellyRange As Range, Colretval As Integer) As Integer 
Dim result As String 
Dim sheet As Worksheet 
Set sheet = ActiveWorkbook.Sheets("Sheet1") 
GetQty = Application.WorksheetFunction.VLookup(sheet.Range(CellyRange), sheet.Range(CellyTable), Colretval, False) 
End Function 

我试过很多例子,但我总是得到#NAME?错误

+1

在这里我看不到使用UDF优于本地VLOOKUP功能的优势!它会慢得多。你有这个理由吗? –

回答

2

有一些问题,主要是:

  • 为VLOOKUP第一个参数不能是一个范围,需要一个值
  • 它的安全没有声明返回类型为整型

这里有一个如何从VBA使用VLOOKUP工作的例子,也许它会帮助(你调用它只是VLOOKUP):

Function VBAVlookup(ByVal search As Variant, _ 
        cell_range As Range, _ 
        offset As Long, _ 
        Optional opt As Boolean = False) 

Dim result As Variant 
result = WorksheetFunction.VLookup(search, cell_range, offset, opt) 
'do some cool things to result 

VBAVlookup = result 

End Function 

除非你正在做的事情非常复杂,否则你总是可以使用=Vlookup(...) * 55 +2之类的东西,只用一个公式就可以从vlookup返回一个操纵结果。

+0

我已经尝试了上述功能,将工作表中的函数的调用改为包含值而不是单元格引用,但我仍然获得#NAME?错误。我已经尝试过= VBAVlookup(“French”,$ D $ 1:$ E $ 4,2),也是= VBAVlookup(“French”,D1:E4,2),但没有运气,我将如何从一个单元调用函数 –

+0

'做对了。这个问题必须是你的宏安全性,因为它没有注册那个名字的功能。确保您使用的是支持宏的书籍,并且您的设置是中等或低于。 – aevanko

+0

@user:你在哪里把你的代码?应该在常规模块中,而不是在表单模块中。 –

0

下面是得到一个列范围内的样品:

Range("A2", Range("A2").End(xlDown)).Rows.Count 

自定义你的方式,所以这可能会帮助你通过你的范围。