2017-08-24 6 views
0

変更イベント内でVLookupを実行する際に問題が発生しています。私は他のすべてのコード行をテストして、それらが動作することを確認したので、動作していないのはVLookupだけです。イベント変更サブニューブ内でVLookupが実行されないのはなぜですか?

簡単な背景のために、私は2枚のシートを持っています。 Sheet1はIDを含んでいます(複数のIDを別々の行に入れることができるため、以下で使用するSPLIT関数)。シート2にはIDとその説明が含まれています。私がしたかったのは、値の変更時にVLookupを実行し、セルにコメントとして各IDの説明を挿入することでした。

私のために働いていないラインは:Application.WorksheetFunction.VLookup(IDs(i), Sheet2.Range("A3:B30"), 2, False)です。

エラーは表示されませんが、ロジックのリマインダを実行しないでexitHandlerにジャンプします。私はIDがVLookupのテーブルに存在することを確信しています。なぜ誰かが私がそれが働かない理由を指摘するのを助けることができるなら、私は非常に感謝されます!以下

はVLOOKUPを使用するコードの抜粋である:

With Target 
If .Comment Is Nothing Then 
    'do nothing 
Else 
    .Comment.Delete 
End If 

If Target.Value = "" Then 
    .Comment.Delete 
Else 
    If InStr(Target.Value, vbCrLf) = 0 Then 
     IDs = Split(Target.Value) 
    Else 
     IDs = Split(Target.Value, vbCrLf) 
    End If 

    For i = LBound(IDs) To UBound(IDs) 
     If commentText = "" Then 
      'Add description for ID as comment 
      commentText = Application.WorksheetFunction.VLookup(IDs(i), Sheet2.Range("A3:B30"), 2, False) 

     Else 
      'Keep on adding description for each ID as comment 
      commentText = commentText & vbCrLf & Application.WorksheetFunction.VLookup(IDs(i), Sheet2.Range("A3:B30"), 2, False) 
     End If 
    Next 

    .AddComment Text:=commentText 
    .Comment.Shape.TextFrame.AutoSize = True 
End If 
End With 

exitHandler: 
    Application.EnableEvents = True 
End Sub 
+0

私は 'Application.WorksheetFunction.VLookup'ではなく' Application.VLookup'を使用することをお勧めしますが、それがあなたの問題の原因だとは思わないでしょう。そのためには、データ型がわからないID()配列を調べなければなりません。まず、ループにコードを挿入し、検索する値をDebug.Printにします。それはあなたに問題のヒントを与えるかもしれません。見つからない一致を捕らえるためのコードも追加する必要があります。それらのすべては、私がVLookupをまったく使用しないように誘導します。 VBAの 'Find'メソッドを使用して等価物を構築します。トラブルシューティングがはるかに簡単になります。 – Variatus

+0

あなたは「exitHandlerへジャンプします」と言っているので、投稿していないコードのどこかにある「On Error GoTo exitHandler」を持っていると仮定します。それをコメントし、あなたが得るエラーを見てください。クラッシュしたら、値を見て、間違っているかどうかを確認してください。 (Variatusが示唆しているように、おそらく 'ID(i)'を実際に見て、それが実際に** 'Sheet2'で**あることを確認する必要があります。 VBAは実際にそこで動作します) – YowE3K

+0

split関数を使用するので、IDs(i)は文字列値です。あなたのデータに数字が含まれていると思いますので、文字列を最初に数値に変換してください。 – jkpieterse

答えて

0

varible defintionsの一部として不足している、私はcommentTextがStringとして定義されていることを推測します。 Vlookupが一致なしで検索を実行すると、エラーが返されるので、変数はVariantと定義されていなければなりません。そうしないと型の不一致が発生します。 On Error Goto - ステートメントを使用すると、エラーが表示されません。また、エラーが発生していない場合、IsError -Functionを使用してVlookupの後にチェックする必要があります。

0

ご回答ありがとうございます。実際、Application.VLookupではなくApplication.WorksheetFunction.VLookupである必要があります。私は2042エラーを防ぐためにID(I)をCLngに変換しなければならなかった。エラーコードを表示するには、commentTextをVariantに変更する必要もあります。最後に

が、これは私のために働いていたものです:すべての助けを再び

Application.VLookup(CLng(IDs(i)), Sheet2.Range("A3:B30"), 2, False) 

ありがとう!

関連する問題