I can not reproduce this (from your Post #11).
However, your basic methodology is flawed here anyway.
Instead of looping the whole listbox and testing for which items .Selected = True (which gets thrown with .ColumnHeads), you should just focus on the .ItemsSelected collection.
Loop that to...
Just had a quick glance because I'm rushing at the moment, but the problem appears to be:
' ...
For i = 0 To .ListCount - 1
If .Selected(i) = True Then ' <--- Problem here
' strFilter = strFilter & " " & i & ":" &...
The only problem is that it won't match straight urls's like www.spamsite.com - the offending text needs to include the protocol and ://
Whether that is a real issue, I don't know. It depends on at which point the spam filter runs the check.
Does it occur after whatever other forum code has...
I guess that might be the one I mentioned in Post #12
I thought if you were already using such an addon then you may have missed the whitelist capability - but now we know you're not using one.
All these always come with extra wallet pressure 😖
Something like this should get you quite far:
/(([http|ftp|file|mailto|imap|tel|ldap]s?):\/\/(?!(www.)?access-programmers.co.uk)[\w\.\/\-=?#]+)/i
(based on the pattern in Philipp's link)