2015-09-01 157 views
0

我得到在下面的代碼對象所需錯誤VBA ISERROR和VLOOKUP

Set Flag = "If(Application.WorksheetFunction.IsError(Application.WorksheetFunction.VLookup(ActiveCell.Offset(0, Offset1).Value, abcd.Value, 1, False)),False,True)" 

    If (Flag = True) Then 
    ActiveCell.Value = "abc" 

線其中abcd是一個命名的範圍對象所需的錯誤。 有人可以建議的方式來糾正這個錯誤?

+2

你不能設置'Flag'爲一個字符串。然而,它看起來像國旗可能是布爾?很難用這麼小的代碼告訴 –

+1

你在這裏做什麼?什麼是「標誌」定義爲?爲什麼不使用VBA來處理if語句和搜索? – Gareth

+0

@Gareth是對的。如果您在VBA中開始工作,您應該儘快避免使用WorksheetFunction並使用VBA函數。請參閱http://www.rondebruin.nl/win/s9/win006.htm以查找範圍內的值 – Roland

回答

0

我對vlookup函數有些疑惑。我不明白你想要做的一切,但是

Application.WorksheetFunction.VLookup(ActiveCell.Offset(0, Offset1).Value, abcd.Value, 1, False) 

看起來很不穩定。

  1. 您的第二任期是abcd.Value。這需要是一個單元格範圍。
  2. 你的第三個值是1.vlookup的第一列是爲索引保留的,而不是可檢索的值,所以我不認爲你可以在這裏得到值1。
+0

您可以使用列爲「1」,但您只返回搜索值... –

0

如果您使用Application.WorksheetFunction.VLookup(),則不匹配會導致運行時錯誤,您需要使用On Error來捕獲該錯誤。

如果改用Application.VLookup()那麼誤差值中沒有匹配成功的情況下返回 - 你可以測試這種使用IsError()

If IsError(Application.VLookup(ActiveCell.Offset(0, Offset1).Value, _ 
              Range("abcd"), 1, False)) Then 

    ActiveCell.Value = "abc"