А как же:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
If ActiveCell.Address <> Target.Address Then
MsgBox "Manually Typed"
Else
MsgBox "Chosen from list"
End If
End If
End Sub
Уже поздно, и я могу ошибаться, но выбранное значение из списка будет сохранять активную ячейку такой же, как целевая ячейка. Любое введенное вручную значение вступит в силу только после какого-либо изменения активной ячейки.