Con VB5, infatti, se Y> 0 (e quindi, anche se Y=1) il confronto...
If Y = 1 Then LIst_Supporto.Items.Add(X & " " & Buf1)
...viene riconosciuto TRUE.
Con Visual Studio Express, invece, il confronto è di tipo Boolean, quindi è indispensabile la forma If (Y = 1) = True altrimenti Y=1 viene riconosciuto come False.
Se Y è un intero quello che hai scritto non ha molto senso ...

segnalazione di errore grave se si utilizza una variabile che "esce" (??) da un ciclo.

Che vuol dire "una variabile che esce da un ciclo" ? Di quale errore grave parli ?
Scusa ma anche questo non mi pare chiaro ...

Quello che devi fare con VB.NET (e che non si faceva con VB5/6 creando molte volte situazioni confuse) è dichiarare esattamente il tipo di ogni variabile o oggetto usato.

Comunque, una soluzione potrebbe essere

codice:

codice:
        Dim i As Integer
        Dim curr As String
        Dim cnt As Integer = 1
        Dim prec As String = ListBox1.Items(0).ToString()


        ListBox2.Items.Clear()


        For i = 1 To ListBox1.Items.Count - 1
            curr = ListBox1.Items(i)


            If prec <> curr Then
                ListBox2.Items.Add(prec + " " + cnt.ToString())
                prec = curr
                cnt = 1
            Else
                cnt = cnt + 1
            End If
        Next
        ListBox2.Items.Add(prec + " " + cnt.ToString())