简体   繁体   中英

VBA Excel Comment Lookup

I have several data validation list in cells L6:U6 . They are all the same list. The list comes from the range BD3:BD15 and is in alphabetical order. In cells BE3:BE15 I have comments regarding the different items that appear in my drop down list. What I am looking for is when an item is selected in any of my data validation cells, that the comment will be vlookup'ed from range BD3:BE15 . So for example, you select the word "Burn" in the drop down or cell L6 , and a vlookup will be done with range BD3:BE15 to pull the comment related to how to treat a burn will appear when you hover over cell L6 .

Here is the code I have come up with, but when I run it I hit a few problems. I get a Run-time error '1004': Application-defined or object defined error. I hit okay and the comments only appear over cells L6:N6 . For the comments I do get, I can not see the entire string, it gets cut off with several words off-screen. And when I select a different item, like the word "Poison", the comment does not update either. Can someone review the code I have and tell me where I am going wrong?

Sub CommentLookup()
'Range where you want to add comments to
Dim commentRange As Range
Dim c As Range
'Range to lookup
Dim lookRange As Range
'Define our ranges
Set commentRange = Range("$L$6:$U$6")
Set lookRange = Range("$BD$3:$BE$15")
Application.ScreenUpdating = True
'loop through and comment
For Each c In commentRange
    With c
        .ClearComments
        .AddComment
        .Comment.Visible = False
        .Comment.Text Text:=CStr(WorksheetFunction.VLookup(c, lookRange, 2, False))
        .Comment.Shape.TextFrame.AutoSize = False
    End With
Next c
Application.ScreenUpdating = True
End Sub

There's an issue with your VLOOKUP() . In the event that your cell does NOT have an entry in the VLOOKUP() table, it will error out. One quick solution is to slightly tweak the code:

On Error Resume Next
.Comment.Text Text:=CStr(WorksheetFunction.VLookup(c, lookRange, 2, False))
On Error GoTo 0

Another alternative would be to prompt the user to add the missing value/return value, but that's a little more involved and I'm not sure what you want to return if there's no VLOOKUP() entry found.

Edit: Here's some error handling included. It will expand the VLOOKUP table if there's no entry for a cell value:

Option Explicit

Sub CommentLookup()
Dim commentRange As Range 'Range where you want to add comments to
Dim c As Range
Dim lookRange As Range     'Range to lookup
Set commentRange = Range("$L$6:$U$6")     'Define our ranges
Set lookRange = Range("$BD$3:$BE$15")    
Application.ScreenUpdating = False
For Each c In commentRange 'loop through and comment
    With c
        c.Select
        .ClearComments
        .AddComment
        .Comment.Visible = False
        On Error GoTo tableAdd
        .Comment.Text Text:=CStr(WorksheetFunction.VLookup(c, lookRange, 2, False))
        On Error GoTo 0
        .Comment.Shape.TextFrame.AutoSize = False
    End With
Next c
Application.ScreenUpdating = True
Exit Sub

tableAdd:
Dim entry As String
entry = InputBox("What is the expected return value for " & c.Value)
With lookRange
    .Cells(.Rows.Count, .Columns.Count).Offset(1, 0).Value = entry
    .Cells(.Rows.Count, 1).Offset(1, 0).Value = c
    Set lookRange = Range("$BD$3:$BE$" & .Cells(.Rows.Count, .Columns.Count).Offset(1, 0).Row)
End With
Resume Next

End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM