Hola mosaic04.
El tema está en que el texto que estás insertando en el documento word no se reconoce como RTF o no se inserta como RTF, de forma que el texto en word (si no ocultas la aplicación lo puedes comprobar) está sin formato. Cuando vuelves a asignar el texto al RichTextBox desde el word, el texto no tiene formato RTF, por lo que pierdes esas carácterísticas. La solución pasa por conseguir indicar a word que el formato del documento es RTF y por asignar/recuperar el texto del RichTextBox a través de la propiedad TextRTF. Como no sé como se puede indicar esto al objeto WordBasic, te presento esta otra alternativa a ver que te parece...
Se trataría de guardar el valor de la propiedad TextRTF en un string, pero sustituyendo cada palabra de RichTextBox1.Text por ciertos carácteres...
Ejecutar la corrección tal y como la haces y luego sustituir en la variable string aquellos caracteres por la respectiva palabra corregida. Terminariamos asignando a RichTextBox1.TextRTF el valor de la variable.
Como no sé si me habré explicado muy bien (que creo que no) te envío un ejemplo de cómo creo que más o menos debería ser la cosa. Ojo que no lo he probado a fondo, sólo para que veas la idea.
Private Sub Corregir()
Dim strTextoRTF As String
Dim var1 As Variant
var1 = Split(rtf.Text, " ")
Dim int1 As Integer
Dim lng1 As Long
Dim lngIdx As Long
lngIdx = 1
strTextRTF = rtf.TextRTF
For int1 = LBound(var1) To UBound(var1)
lng1 = InStr(lngIdx, rtf.TextRTF, var1(int1))
If lng1 > 0 Then
lngIdx = lng1 + Len(var1(int1))
strTextRTF = Left(strTextRTF, lng1 - 1) _
& "???" & Mid(strTextRTF, lngIdx)
End If
Next int1
'Aquí va tú código
Dim MSWord As Object, Texto As String
Set MSWord = CreateObject("Word.Basic")
MSWord.AppMinimize
MSWord.AppHide
MSWord.FileNewDefault
MSWord.EditSelectAll
MSWord.EditCut
MSWord.Insert rtf.Text
MSWord.StartOfDocument
On Error Resume Next
MSWord.ToolsSpelling
On Error GoTo 0
MSWord.EditSelectAll
Texto = MSWord.Selection
If Mid(Texto, Len(Texto), 1) = Chr(13) Then _
Texto = Mid(Texto, 1, Len(Texto) - 1)
' Aquí le damos la vuelta a la tortilla
If Len(Texto) > 1 Then
var1 = Split(Texto, " ")
lngIdx = 1
For int1 = LBound(var1) To UBound(var1)
lng1 = InStr(lngIdx,strTextRTF, "???")
If lng1 > 0 Then
lngIdx = lng1 + 3
strTextRTF = Left(strTextRTF, lng1 - 1) _
& var1(int1) & Mid(strTextRTF, lngIdx)
End If
Next int1
rtf.TextRTF = strTextRTF
End If
MSWord.FileCloseAll 2
MSWord.AppClose
Set MSWord = Nothing
End Sub
Bueno, resalto de nuevo que
el código está sin probar ni depurar, escrito al vuelo, es para que pilles la idea... Otra cosa: he supuesto que el número de palabras que se mandan corregir es el mismo número que las corregidas.
Espero que esto te sirva.
Chao.