変更イベント内で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
私は 'Application.WorksheetFunction.VLookup'ではなく' Application.VLookup'を使用することをお勧めしますが、それがあなたの問題の原因だとは思わないでしょう。そのためには、データ型がわからないID()配列を調べなければなりません。まず、ループにコードを挿入し、検索する値をDebug.Printにします。それはあなたに問題のヒントを与えるかもしれません。見つからない一致を捕らえるためのコードも追加する必要があります。それらのすべては、私がVLookupをまったく使用しないように誘導します。 VBAの 'Find'メソッドを使用して等価物を構築します。トラブルシューティングがはるかに簡単になります。 – Variatus
あなたは「exitHandlerへジャンプします」と言っているので、投稿していないコードのどこかにある「On Error GoTo exitHandler」を持っていると仮定します。それをコメントし、あなたが得るエラーを見てください。クラッシュしたら、値を見て、間違っているかどうかを確認してください。 (Variatusが示唆しているように、おそらく 'ID(i)'を実際に見て、それが実際に** 'Sheet2'で**あることを確認する必要があります。 VBAは実際にそこで動作します) – YowE3K
split関数を使用するので、IDs(i)は文字列値です。あなたのデータに数字が含まれていると思いますので、文字列を最初に数値に変換してください。 – jkpieterse