Your solution is fine. As a programmer, there are a few nit-picky things I might do, but nothing major. The way you did it, I think, also is pretty clear and simple if you pass on your project to another person.
For the record, though, you don't have to give the number of possible states....
Dim states() As String = split(text)
And something to remember is that GetObjectByName() method returns true or false, depending on whether or not it was successful:
if scene.GetObjectByName("Hilite-" & states(i), hilite) then
hilite.visible = True
end if
That way an error won't stop your script... but then it might be harder to detect the error, also.
#XPression