Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _ hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _ lParam As Any) As LongConst EM_FMTLINES = &HC8' Return an array with all the lines in the control.' If the second optional argument is True, the hard CR-LFs are preserved' (hard CR-LFs are those inserted by the user, soft CRLFs are those inserted' automatically to wrap long lines)Function TextBoxGetLines(tb As TextBox, Optional KeepHardLineBreaks As Boolean) _ As String() Dim result() As String Dim i As Long ' Activate soft line breaks. A soft line break is marked by the ' CR-Cr-LF sequence. SendMessage tb.hwnd, EM_FMTLINES, True, ByVal 0& ' Retrieve all the lines in one operation and split results. ' This operation will leave trailing CR character for soft line breaks only. result() = Split(tb.Text, vbCrLf) ' We need a loop to trim the trailing CR character. If the second ' argument is true, we need to manually add a CR-LF pair to all ' the lines that don't contain such trailing CR char. For i = 0 To UBound(result) If Right$(result(i), 1) = vbCr Then result(i) = Left$(result(i), Len(result(i)) - 1) ElseIf KeepHardLineBreaks Then result(i) = result(i) & vbCrLf End If Next ' Deactivate soft line breaks. SendMessage tb.hwnd, EM_FMTLINES, False, ByVal 0& TextBoxGetLines = result()End Function