You are sorting strings, not numbers. Therefore it's just like an alphabetical sort, character by character. The greater than/less than comparison stops at the first different character and compares them. Therefore, anything that starts with "OP 1" comes before anything that starts with "OP 2". If you want to sort the numbers, you'll have to strip off the "OP " portion somehow.
I do remove OP and convert it to a long using:
If sheetName Like "*OP*" Then
sheetName = Right(sheetName, Len(sheetName) - 3)
vSheetArr(I) = CLng(sheetName)
You only think you're converting it to a long. Except you're stuffing it back into a variable that's already a string. Therefore VBA is kindly changing it back into a string for you.
Change your sort comparison to
If CLng(vSheetArr(i)) > CLng(vSheetArr(j)) Then