Putroppo, quando il ritorno a capo è fatto in automatico il CRLF non compare tra i caratteri del testo... Penso che tu te ne sia già accorto da solo.
L'unica maniera con cui puoi ovviare a questo è confrontare la lunghezza delle righe con la larghezza della TextBox: potresti
codice:
  Dim sText As String
  Dim TextBoxWidth As Long
  Dim sTextArr() As String

'Recuperi contenuto e larghezza della TextBox
sText = Text1
TextBoxWidth = Text1.Width

' Splitti il contenuto per ritorni a capo (da INVIO)
sTextArr() = Split(sText, vbCrLf)
In questo modo hai un'array popolato con tutte le righe della TextBox.
Ogni elemento dell'array rappresenta una riga della TextBox ogni volta che sei andato a capo con INVIO.
Q questo punto dovresti fare un ciclo For sull'array, ad ogni iterazione fare un TextWidth del testo memorizzato nell'elemento dell'array. Con TextWidth ottieni la larghezza che occuperebbe, il testo passato, se venisse stampato sul Form. E' quindi opportuno assegnare al Form lo stesso Font della TextBox.
Una volta ottenuta questa larghezza, se questa è maggiore della larghezza della TextBox, dovresti "spezzettarla" in tante parti di larghezza massima uguale a quella della TexBox.

Eccoti un po' di codice:
(command1_Click esegue l'operazione che ti ho descritto sul testo di una TexBox)
codice:
Private Sub Command1_Click()

  Dim sText As String
  Dim TextBoxWidth As Long
  Dim sTextArr() As String
  Dim sTempString As String
  Dim sNewRowStr As String
  Dim j As Long
  
  TextBoxWidth = Text1.Width              ' ottiene larghezza TextBox
  sText = Text1                           ' testo su Text1
  sTextArr() = Split(sText, vbCrLf)       ' sTextplitta per ritorni a capo
  
  ' ciclo sulle righe
  For j = 0 To UBound(sTextArr())
    ' confronto larghezza riga corrente con larghezza TextBox
    ' se è > la modifico aggiungendo ritorni a capo quanti bastando per creare
    ' n stringhe di larghezza = alla larghezza della TextBox
    If TextWidth(sTextArr(j)) > TextBoxWidth Then sTextArr(j) = SplitInRows(sTextArr(j), TextBoxWidth)
  Next j
  
  sText = Join(sTextArr(), vbCrLf)            ' nuovo testo in JOIN
  MsgBox "Ecco il testo formattato come Text1: " & sText
  
End Sub

'
Private Function SplitInRows(ByVal Text As String, ByVal nLength As Long) As String

  ' Restituisce la string Text  suddivisa in tante stringhe di larghezza
  ' massima = nLength concatenate con separatore CRLF
  
  Dim sTemp As String
  Dim sRetVal As String
    
  While TextWidth(Text) > nLength
  
    sTemp = Text

    While TextWidth(sTemp) > nLength
      sTemp = Left$(sTemp, Len(sTemp) - 1)    ' trovo una strina di
    Wend                                      ' larghezza = nLength
    
    Text = Mid$(Text, Len(sTemp) + 1)         ' la elimino da Text
    
    If sRetVal = "" Then                      ' concateno al valore
      sRetVal = sTemp                         ' di ritorno
    Else
      sRetVal = sRetVal & vbCrLf & sTemp
    End If
    
  Wend
  
  ' concateno ultima parte
  If Text <> "" Then sRetVal = sRetVal & vbCrLf & Text

  SplitInRows = sRetVal
  
End Function
Purtroppo, il bordo della TextBox o eventuale Scrollbar verticale può causarti problemi in quanto, la larghezza della TextBox è sempre maggiore di quella dell'area editabile. Per il bordo ti basta determinare un valore costante da sottrarre alla larghezza. Per quanto riguarda la scrolbar (ammesso che la tua TextBox ne abbia una) dovresti trovarne la larghezza e sottrarla (penso che SendMessage ci si dovrebbe riuscire). Altrimenti puoi usare anche in questo caso una costante.

Spero di esserti stato utile
Ciao
Simo