2016-02-14 27 views
0

我相信我的語法錯了,有人會指出這個問題嗎?帶索引/匹配的工作表函數

預先感謝

result = Application.WorksheetFunction.IfError(Application.WorksheetFunction.Index_ 
(Range("Sheet10!$AC$40:$AC$118"), Application.WorksheetFunction.Match(Range("Sheet10!E3"),_ 
Range("Sheet10!$AD$40:$AD$118"), 0)), "") 
+1

我不相信[IFERROR函數](https://support.office.com/en-us/article/IFERROR-function-F59BACDC-78BD-4924-91DF-A869D0B08CD5)可以用作[ WorksheetFunction對象](https://msdn.microsoft.com/en-us/library/office/ff834434.aspx)。您可以嘗試使用[Application.Evaluate方法](https://msdn.microsoft.com/en-us/library/office/ff193019.aspx)。 – Jeeped

+0

@Jeeped。我剛剛刪除了iferror部分,仍然出現錯誤。相同的語法只是刪除了所有的iferror部分 –

回答

1

IFERROR function不能用作WorksheetFunction object。只要沒有錯誤,公式就會起作用,但當WorksheetFunction.IfError發揮作用以返回默認值(例如零長度字符串)時將會窒息。

Sub ject() 
    Dim result As Variant 
    'this works if a match is found 
    result = Application.WorksheetFunction.IfError(_ 
       Application.WorksheetFunction.Index(Range("Sheet10!AC40:AC118"), _ 
       Application.WorksheetFunction.Match(Range("Sheet10!E3"), Range("Sheet10!AD40:AD118"), 0)), "") 
    Debug.Print result 
End Sub 

您可以嘗試使用Application.Evaluate method代替。

Sub jective() 
    Dim result As Variant 
    'this works on match or no match 
    result = Application.Evaluate("IFERROR(INDEX(Sheet10!AC40:AC118, " & _ 
       "MATCH(Sheet10!E3, Sheet10!AD40:AD118, 0)), ""nothing"")") 
    Debug.Print result 
End Sub 

通常情況下,可以有Application.Index(...WorksheetFunction.Index(...但沒有必要Application.WorksheetFunction.Index(...

當提到帶有字符串的靜態單元地址時,通常不需要絕對製造商,因爲字符串不會改變。一種可能的例外是,當你使用字符串填充大量的單元格時,沒有從評估一個單一的公式得出結果。

+0

BINGO。我結束了稍微改變,以使其工作(有一個表內錯誤驗證,只是有vba代碼返回單元格的內容),但我確實嘗試過,它的工作。非常感謝 –