2011-12-14 187 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 

自定義你的方式,所以這可能會幫助你通過你的範圍。