В вашем коде есть две проблемы. Во-первых, коллекция не объявлена таким образом, что оба метода могут получить к ней доступ. Другая проблема заключается в том, что вы не заботитесь о случаях, когда адрес не найден. Посмотрите ниже:
Public compreplace As Collection
Sub popdata()
Set compreplace = New Collection
compreplace.Add "AA-", "test@yahoo.com"
compreplace.Add "BB-", "test2@yahoo.com"
compreplace.Add "CC-", "test3@yahoo.com"
compreplace.Add "DD-", "test4@yahoo.com"
compreplace.Add "EE-", "test5@yahoo.com"
popexcel
End Sub
Function popexcel()
Dim rc As Integer
rc = ActiveSheet.UsedRange.Rows.Count
Dim i As Integer
For i = 2 To rc
If ItemExists(compreplace, Range("K" & i).Value) Then
Range("L" & i).Value = compreplace.item(Range("K" & i).Value)
End If
Next i
End Function
Function ItemExists(coll As Collection, item As String) As Boolean
On Error Resume Next
coll.item item
ItemExists = (Err.Number = 0)
End Function
Функция ItemExists возвращает true, если есть соответствующий элемент. Публичное объявление вверху делает его доступным для вашего метода pop. Не лучшим образом, но это работает.