If you have an array of 3 textboxes, named Text1 and having indices 1, 2 and 3, you could probably set something up like this:
'30 character max length
Const MAX_LENGTH = 30
Private Sub Text1_Change(Index as Integer)
Dim CurrWord as String
If (Len(Text1(Index).Text) > MAX_LENGTH) then
If (Index < Text1.Count) Then
CurrWord = GetLastWord(Text1(Index).Text)
Text1(Index + 1).Text = CurrWord & " " & Text1(Index + 1).Text
Text1(Index).Text = Left$(Text1(Index).Text, Len(Text1(Index).Text) - Len(CurrWord))
End If
End If
End Sub
'This function gets the last word in a string
'There may be an easier way to implement this function
Public Function GetLastWord(strLine as String) as String
Dim iCharCount as Integer
iCharCount = Len(strLine)
Do Until (Mid$(strLine, iCharCount - 1, 1) = " "

iCharCount = iCharCount - 1
If(iCharCount = 1) Then
Exit Do
End If
Loop
GetLastWord = Mid$(strLine, iCharCount)
End Function
Whenever you type in a textbox, it will check to see if you have exceeded the maximum length. If you have, it will find the last word typed, put that word in the next textbox (if there is a next textbox) and remove it from the current textbox.
This event will fire recursively, so when you move the word to the next textbox, the Change event for that textbox will fire also, and move the last word to the next textbox if necessary.
Hope this helps.
Steve [sig][/sig]