maybe try Redim Preserve?
Why does BsP's maximum value needs to be a variable? You seem to be filling BsP with every list item in List2. So couldn't you just initially dimension BsP as:
Dim BsP(1 To List2.ListCount) As String
If you only going to say put List2's selected items into BsP you could try this method:
For i = 0 To List2.ListCount - 1
If List2.Selected(i) Then
ReDim Preserve BsP(iNum)
BsP(iNum) = List2.List(i)
iNum = iNum + 1
End If
Next
Then maybe:
For i = 0 to UBound(BsP)
a.WriteLine ("set m1 ""fraglimit 10" & " ; map ") & (Left$(BsP(i), Len(BsP(i)) - 4))
Next