Instead of checking the .value and getting the run time error, you could look at
the .text
With Worksheets("Members")
receive = .Cells(6, 4).Text
For i = 7 To endrow
receive = receive & "," & .Cells(i, 4).Text
Next i
End With
You could also check for an error with something like:
if iserror(.cells(6,4).value) then
'skip it
else
'process it
If you wanted to check to see if there was an @ sign in each of those 7 cells,
you could use instr():
With Worksheets("Members")
receive = ""
If InStr(1, .Cells(6, 4).Text, "@", vbTextCompare) > 0 Then
'found one
receive = .Cells(6, 4).Text
End If
For i = 7 To endrow
If InStr(1, .Cells(i, 4).Text, "@", vbTextCompare) > 0 Then
'found one here, too
receive = receive & "," & .Cells(i, 4).Text
End If
Next i
End With
(Untested, uncompiled. Watch for typos.)