Entiendo que aui hay un error ya que en el primer caso al empezar el For en 0 la resta de i-1 devuelve -1
List1.List(i - 1)
Por otra parte el For i = 0 To List1.ListCount debe ir hasta ListCount-1 ya que como te he comentado, si tiene 10 elementos van de 0 hasta 9 cuando ListCount vale 10
De Todos modos, se me ocurre una opcion mas simple que es no pasar el valor si este es nulo, por ejemplo así:
Código vb:
Ver originalDim FilaExcel As Single
For i = 0 To List1.ListCount -1
If List1.List(i) <> "" Then
FilaExcel = FilaExcel + 1
xlSh.Cells(FilaExcel + 3, 1).Value = List1.List(i) 'CODIGO
End If
Next
De este modo no tienes que comprobar nada después ¿ No ?