Rtf

Hola, espero que me puedas ayudar porque la verdad no se como solucionarlo...
Bien intento marcar palabras dentro de un richtextbox funciona muy bien en visual basic 6 pero a la hora de hacer lo mismo en access 2003 me sale error con el comando highlightwords...
Tengo lo siguiente:
Option Explicit
Private Function highlightwords(rtb As RichTextBox, sFindString As String, lColor As Long) As Integer
Dim lFoundPos As Long 'Posicion del primer carácter que coincide
Dim lFindLength As Long 'Longitud del string a buscar
Dim lOriginalSelStart As Long
Dim lOriginalSelLength As Long
Dim iMatchCount As Integer 'Número de veces que se encontró
'Guardamos la posición del punto de inserción y la longitud del text seleccionado
lOriginalSelStart = rtb.SelStart
lOriginalSelLength = rtb.SelLength
'Guardamos la longitud del texto a buscar
lFindLength = Len(sFindString)
'Buscamos la primera ocurrencia
lFoundPos = rtb.Find(sFindString, 0, , rtfNoHighlight)
While lFoundPos > 0
iMatchCount = iMatchCount + 1
rtb.SelStart = lFoundPos
'La propiedad SelLength se pone a 0 al cambiar SelStart
rtb.SelLength = lFindLength
rtb.SelColor = lColor
'Buscamos la siguiente ocurrencia
lFoundPos = rtb.Find(sFindString, lFoundPos + lFindLength, , rtfNoHighlight)
Wend
'Reponemos la posición y longitud del punto de insercción
rtb.SelStart = lOriginalSelStart
rtb.SelLength = lOriginalSelLength
'Devolvemos el número de ocurrencias encontradas
highlightwords = iMatchCount
Private Sub Form_Load()
RichTextBox0 = "GCXO 271100Z VRB06KT 8000 BCFG FEW003 OVC005 20/18 Q1015 NOSIG"
Private Sub Comando0_Click()
highlightwords RichTextBox0, "NOSIG", vbRed
Y cuando hago click me sale lo siguiente:
Se ha producido el error '13' en tiempo de ejecución:
No coinciden los tipos
Que puedo hacer para que funcione en access
Gracias...

2 respuestas

Respuesta
1
Haber, el problema es que cuando trabajas con controles que no son standard de Access, el los toma como "ControlActivex", o en realidad los trabaja como Object, no los reconoce como el control que es. No sucede lo mismo en Vb.
Entonces que debe hacer, en vez de que la variable "rtb" en la función que la pasas como RichTextBox, la debes pasar como Object:
******Funcion Original*****
Private Function highlightwords(rtb As RichTextBox,........
*****Quedaria **********
Private Function highlightwords(rtb As Object,........
El problema es cuando coloques un punto, no te saldrá las propiedades ni eventos del control en cuestión, ese seria un problema si no se conoce sus propiedades ni eventos, que hacer:
Mientras trabajes por código, colocalo como RichTextBox, para que te muestre las propiedades y eventos, y después lo cambias como Object.
Ahora, el código que me envío esta recortado, ya que hay procedimientos, que no cerro con el End Sub, así como la funcoion que la cerro donde no era, pero me imagino que fue intencional, ya que el depurador de Vb en Access, te hubiese mostrado este error, de todas maneras te envío el Código de como debería quedar:
********************
Option Explicit
Private Function highlightwords(rtb As Object, Optional sFindString As String, Optional lColor As Long) As Integer
Dim lFoundPos As Long 'Posicion del primer carácter que coincide
Dim lFindLength As Long 'Longitud del string a buscar
Dim lOriginalSelStart As Long
Dim lOriginalSelLength As Long
Dim iMatchCount As Integer 'Número de veces que se encontró
'Guardamos la posición del punto de inserción y la longitud del text seleccionado
lOriginalSelStart = rtb.SelStart
lOriginalSelLength = rtb.SelLength
'Guardamos la longitud del texto a buscar
lFindLength = Len(sFindString)
'Buscamos la primera ocurrencia
lFoundPos = rtb.Find(sFindString, 0, , rtfNoHighlight)
While lFoundPos > 0
iMatchCount = iMatchCount + 1
rtb.SelStart = lFoundPos
'La propiedad SelLength se pone a 0 al cambiar SelStart
rtb.SelLength = lFindLength
rtb.SelColor = lColor
'Buscamos la siguiente ocurrencia
lFoundPos = rtb.Find(sFindString, lFoundPos + lFindLength, , rtfNoHighlight)
Wend
'Reponemos la posición y longitud del punto de insercción
rtb.SelStart = lOriginalSelStart
rtb.SelLength = lOriginalSelLength
'Devolvemos el número de ocurrencias encontradas
highlightwords = iMatchCount
End Function
Private Sub Form_Load()
RichTextBox0 = "GCXO 271100Z VRB06KT 8000 BCFG FEW003 OVC005 20/18 Q1015 NOSIG"
End Sub
Private Sub Comando0_Click()
highlightwords RichTextBox0, "NOSIG", vbRed
End Sub
**************************
Me comenta como le fue, sino fresco te sigo ayudando.
Att:TELEMACO
Respuesta
1
Nunca he utilizado un RichTextBox, pero analizando ese código, lo que hace la función es devolver el numero de veces que encuentra el texto (sFindString).
Si lo único que quieres es que te marque en rojo las veces que aparece:
Quitale el As Integer de la linea Private Function.
Si quieres que te lo marque y que te diga el numero de coincidencias, entonces (sin cambiar la linea de Private Function), cambia la linea del Comando0_Click
MsgBox "Han aparecido " & highlightwords(RichTextBox0, "NOSIG", vbRed) & " coincidencias."
Xavi
www.mvp-access.com

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas