2017-09-27 13 views
1

大規模なスクリプト内に、一致に基づいて "i"に値を割り当てるだけのコードがあります。アイデアは、入力された値が見つかった場合はマッチ値を返し、そうでない場合は0を返します。それが0ならば、私はユーザにメッセージでsubを終了することができます。しかし、一致がnull値を見つけるたびに、私が導入したiferrorの一部として処理されるのではなく、サブを殺すだけです。私は様々なマナーを試してみましたが(例えばiif(iserror)を使用しています)、どれも動作していないようです。問題の原因Excel VBA値がNULLの場合は一致します

コードは以下の通りです:

i = Application.WorksheetFunction.IfError(Application.WorksheetFunction.Match(username, EL.Range("A:A"), 0), 0) 

私は

ユーザー名が文字列として薄暗いある整数として薄暗いで、InputBox関数から来

ELは、ワークシートのように薄暗いです正しい情報が含まれています。

存在している名前を導入しても問題はありません。機能しない名前を入力するとただちに失敗します。その理由についてはわかりません。私はそれが失敗する理由は見当たりませんが、私は何かを単に、そして私の顔に見逃しているように感じます。

答えて

2

これを代わりに使用してください。 WorksheetFunctionの代わりにApplicationを使用すると、エラーをトラップしてテストできます。

i = Application.IfError(Application.Match(UserName, EL.Range("A:A"), 0), 0) 
+1

私は正式に馬鹿です。即座に問題を解決しました。ありがとうございます。 –

+1

@JayC SJRの答えがあなたを助けてくれたら、答えの左側にある灰色のチェックマークをクリックすると緑色に変わります。 –

+1

私は心配していました。クエリを作成してから最初の15分以内に回答を受け入れることはできません。リマインダーのための乾杯 –

2

私はトラップにApplication.Match機能にエラーがわずかに異なるアプローチを使用します。

Dim i As Variant 

i = Application.Match(UserName, EL.Range("A:A"), 0) 
' if Match wasn't able to found a "match" 
If IsError(i) Then i = 0 
関連する問題