I wrote this ages ago, I think it works fine:

VB Code:
  1. Function SplitText(ByVal Text As String, _
  2.     Optional ByVal Delimeter As String = ";", _
  3.     Optional ByVal Limit As Long = -1, _
  4.     Optional ByVal Compare As VbCompareMethod = vbTextCompare) As String()
  5.     On Local Error Resume Next
  6.     'Add the delimiter to the end of the text so that we return all strings
  7.     Text = Text + Delimeter
  8.    
  9.     'The Ubound of the array
  10.     Dim Count As Integer
  11.     Count = 0
  12.    
  13.     'Find the start/end of the first string
  14.     Dim StartPos As Long, EndPos As Single
  15.     StartPos = 1
  16.     EndPos = InStr(1, Text, Delimeter, Compare)
  17.    
  18.     'What gets returned
  19.     Dim ReturnValue() As String
  20.    
  21.     'Loop for all strings
  22.     Do While EndPos > 0 And (Limit <= -1 Or EndPos <= Limit)
  23.         'Add the current string
  24.         ReDim Preserve ReturnValue(Count)
  25.         ReturnValue(Count) = Mid(Text, StartPos, EndPos - StartPos)
  26.         'Increment the length of the array
  27.         Count = Count + 1
  28.         'Find the next string
  29.         StartPos = EndPos + Len(Delimeter)
  30.         EndPos = InStr(StartPos, Text, Delimeter, Compare)
  31.     Loop
  32.     'Return the array
  33.     SplitText = ReturnValue
  34. End Function


Try testing it with something like this:

VB Code:
  1. Private Sub Command1_Click()
  2.     Dim Texts() As String
  3.     Texts = SplitText("String1;String2;String3;String4")
  4.     Dim LoopCounter As Integer
  5.     For LoopCounter = LBound(Texts) To UBound(Texts)
  6.         MsgBox Texts(LoopCounter)
  7.     Next LoopCounter
  8. End Sub