OK. Well, since we can't do that with actual variables, we could likely achieve similar functionality with some sort of collection type object, such as an Array of Integer, or List(Of Integer), or similar. Both of those vb.net based collection types start at zero though, not one, like most types of collections based in vb.net. On the flip side, most collection types that are defined within the Inventor API or iLogic API start at one, instead of zero, to make them more 'natural' feeling to work with.
Below is another example you can play around with. It is using a simple Array of Integers, with zero as the starting value. That way, we do not even need the 'Else' side of the If statement. Then, within the loop, and within the If statement, it specified the element within the Array by the current value of 'i' minus one, since the array starts at zero, and changes the value of that element to the current value of 'i'. After the iteration, we can either just use that Array variable directly within your message, or we can extract the individual Array values to static variables first, then use those variables within the message. Just another thought to reduce required code while maintaining similar functionality.
Dim i As Integer = 0
Dim oResults() As Integer = {0,0,0,0}
While i <= 4
i += 1
Dim oxyfuel As String = "oxyfuel_F" & i
If Feature.IsActive(oxyfuel) Then
'i-1, because Array's start at zero, not one
oResults(i - 1) = i
End If
End While
MessageBox.Show("CF" & oResults(0) & oResults(1) & oResults(2) & oResults(3), "Part name")
Wesley Crihfield

(Not an Autodesk Employee)