** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Función para cambiar formato de cadena de texto
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoFunción para cambiar formato de cadena de texto

 Responder Responder Página  12>
Autor
Mensaje
deprofundis Ver desplegable
Habitual
Habitual
Avatar

Unido: 18/Noviembre/2015
Localización: Madrid
Estado: Sin conexión
Puntos: 62
Enlace directo a este mensaje Tema: Función para cambiar formato de cadena de texto
    Enviado: 18/Enero/2016 a las 17:16
Hola a todos

Me gustaría crear una función para cambiar de formato una cadena de texto.
Luego, esa función la aplicaría a un combo que tendría como tipo de origen de la fila una lista de valores que serían "Formato 1"; "Formato 2".

Formato 1:
Se aplicaría si la última palabra de la cadena de texto está precedida de un espacio y una coma y si es una de las siguientes palabras (", el, la, los, las, lo, un, una, unos, unas, y, que, con, de, del, o")

La aplicación del formato 1 daría como resultado (si es uno de los casos anteriores):
1º Pasar la última palabra de la cadena de texto al principio de la cadena
2º Eliminar la última coma y el espacio posterior a ella.
3º Pondríamos en la cadena de texto, la primera letra de cada palabra en mayúscula y el resto de las letras en minúsculas excepto en las palabras que se hallaran enmedio del texto y fueran ("el, la, los, las, lo, y, que, con, de, del, o") que siempre irían en minúsculas.

"DESIERTO DE LOS TÁRTAROS, EL" pasarlo a "El Desierto de los Tártaros"

Formato 2:
Se aplicaría si la primera palabra de la cadena de texto es (", el, la, los, las, lo, un, una, unos, unas, y, que, con, de, del, o")

La aplicación del formato 2 daría como resultado (si es uno de los casos anteriores):
1º Pasar la primera palabra al final de la cadena de texto
2º Iría precedida de un espacio seguido de una coma al ponerla al final del texto.
3º Pondríamos en la cadena de texto, la primera letra de cada palabra en mayúscula y el resto de las letras en minúsculas excepto en las palabras que se hallaran enmedio del texto y fueran ("el, la, los, las, lo, y, que, con, de, del, o") que siempre irían en minúsculas.

"El DESIERTO DE LOS TÁRTAROS" pasarlo a "Desierto de los Tártaros, El"

Si el texto no cumple las condiciones para pasarlo a uno de esos 2 formatos se pondría la primera letra de cada palabra en mayúscula salvo las palabras que se hallaran enmedio de la cadena y fueran ("el, la, los, las, lo, y, que, con, de, del, o").

Así desde el combo, después de actualizar, llamaría a la función para cambiar el formato del texto introducido en un textbox.

Si alguien puede indicarme cómo podría ser la función...

Muchas gracias de antemano

Este texto lo he corregido en su contenido del texto original que expuse aquí, para mejorar su comprensión.



Editado por deprofundis - 19/Enero/2016 a las 01:22
deprofundis
Arriba
VIMIPAS Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Enero/2006
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5220
Enlace directo a este mensaje Enviado: 18/Enero/2016 a las 22:57
Hola deprofundis, buenas noches.

Tengo varias preguntas que hacerte, empezamos:

1.- En cuanto a la forma en que te explicas (por ejemplo lo que sigue):

"En cuanto a las excepciones dentro de la cadena de texto, las mismas que aparecen en tu ejemplo en la función PrimeraLetraMayusculas "el, las, los, las, lo, y, que, con, de, del, o"."

Parece cuando dices "las mismas que aprecen en tu ejemplo"...., repito, parece que te han puesto un exámen y que te has limitado a copiar/pegar exactamente desde donde te han puesto el exámen y lo has traslado aquí.

¿se puede saber si es correcta mi apreciación?.

2.- ¿Qué quieres decir con?:

"En cuanto a las excepciones dentro de la cadena de texto, las mismas que aparecen en tu ejemplo en la función PrimeraLetraMayusculas "el, las, los, las, lo, y, que, con, de, del, o"."

¿De qué excepciones estamos hablando?

3.- Si en vez de esto:

""DESIERTO DE LOS TÁRTAROS, EL" pasarlo a "El Desierto de los Tártaros" "

yo pusiera (en el formato1):

DESIeRTO DE VIMiPaS PARA LOS TARtAROS qUe, EL

¿cómo quedaría reconvertida al pasarlo a "....." (ponlo tu por favor).


4.- Primero indicas que hay que reconvertir todo aquello que vaya precedido de una coma y xx

Así lo pones tú: "el, la, los, las, lo, un, una, unos, unas, y, que, con, de, del, o"

Sin embargo yo considero que debería ser (ya que la coma está antes=previa), así:

", el, la, los, las, lo, un, una, unos, unas, y, que, con, de, del, o"

¿Cómo lo ves tú?.

Por último, yo creo que es sencillo, pero necesito que seas mas pulcro a la hora de explicarte, pues es necesario explicarse informáticamente, sino a Access como NO le hablemos en Access y de la forma que nos pide Access, seguramente haríamos un galimatías "deprofundos" desaciertos.

Te espero.

Saludos



Editado por VIMIPAS - 18/Enero/2016 a las 23:06
Gracias
Arriba
deprofundis Ver desplegable
Habitual
Habitual
Avatar

Unido: 18/Noviembre/2015
Localización: Madrid
Estado: Sin conexión
Puntos: 62
Enlace directo a este mensaje Enviado: 19/Enero/2016 a las 00:53
Hola VIMIPAS
Lo primero... tienes mucha razón, todo es fruto de mi precipitación...
La verdad es que me he explicado fatal y así es difícil entenderme.

Lo que pasa es que tenía esta pregunta puesta en otro foro y claro al ponerla aquí, he hecho un copia y pega de mi pregunta a un compañero en concreto, de otro sitio.

En cuanto a lo que quiero... me explico de nuevo:

Deseo crear una función que me permita cambiar la presentación de la cadena de texto que aparece en un textbox de mi formulario.
La idea sería, una vez creada la función en un módulo estándar, usar un cuadro combinado en mi formulario que contuviera como valores, dos tipos de formato. El combo en cuestión tendría como tipo de origen de la fila, una lista de valores y en origen de la fila esto: "Formato 1; Formato 2"

Formato 1:
Se aplicaría si la última palabra de la cadena de texto está precedida de un espacio y una coma y si es una de las siguientes palabras (", el, la, los, las, lo, un, una, unos, unas, y, que, con, de, del, o")

La aplicación del formato 1 daría como resultado (si es uno de los casos anteriores):
1º Pasar la última palabra de la cadena de texto al principio de la cadena
2º Eliminar la última coma y el espacio posterior a ella.
3º Pondríamos en la cadena de texto, la primera letra de cada palabra en mayúscula y el resto de las letras en minúsculas, excepto en las palabras que se hallaran enmedio del texto y fueran ("el, la, los, las, lo, y, que, con, de, del, o") que siempre irían en minúsculas.

"DESIERTO DE LOS TÁRTAROS, EL" pasarlo a "El Desierto de los Tártaros"

Formato 2:
Se aplicaría si la primera palabra de la cadena de texto es (", el, la, los, las, lo, un, una, unos, unas, y, que, con, de, del, o")

La aplicación del formato 2 daría como resultado (si es uno de los casos anteriores):
1º Pasar la primera palabra al final de la cadena de texto
2º Iría precedida de un espacio seguido de una coma al ponerla al final del texto.
3º Pondríamos en la cadena de texto, la primera letra de cada palabra en mayúscula y el resto de las letras en minúsculas, excepto en las palabras que se hallaran enmedio del texto y fueran ("el, la, los, las, lo, y, que, con, de, del, o") que siempre irían en minúsculas.

"El DESIERTO DE LOS TÁRTAROS" pasarlo a "Desierto de los Tártaros, El"

Si el texto no cumple las condiciones para pasarlo a uno de esos 2 formatos se pondría la primera letra de cada palabra en mayúscula y el resto de las letras en minúsculas, excepto en las palabras que se hallaran enmedio del texto y fueran ("el, la, los, las, lo, y, que, con, de, del, o") que siempre irían en minúsculas.

Espero haberme explicado mejor. De todas formas corregiré esos errores en el contenido de la pregunta.

Un saludo y espero puedas ayudarme con la función, gracias.






Editado por deprofundis - 19/Enero/2016 a las 01:24
deprofundis
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 4927
Enlace directo a este mensaje Enviado: 19/Enero/2016 a las 01:41
Hola deprofundis

Y que has hecho o donde te atoraste, puedes comenzar por usar F1 y buscar las funciones de texto como: Left, Right, Len, Instr, InstrRev.

Y ya que estamos en eso dale una leída a las normas sobre todo la primera(1)

Ya nos cuentas, saludos.

Editado por emiliove - 19/Enero/2016 a las 01:44
Arriba
VIMIPAS Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Enero/2006
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5220
Enlace directo a este mensaje Enviado: 20/Enero/2016 a las 23:13
Hola buenas noches.

Option Compare Database
Option Explicit

Public Function FORMATO_UNO(FRASE_ENTRA As String)
'Creo que Emiliove tiene toda la razón del mundo, por eso te voy a hacer un favor que creo que te perjudicará mas que nada. Este:

Dim PosicionComa As Long 'Por si algún día la frase es muy larga uso Long
PosicionComa = InStrRev(FRASE_ENTRA, ",") 'La busco por detrás de la cadena, de detrás hacia adelante, nos indican que debe estar al final
If PosicionComa = 0 Then Exit Function 'Buscamos en la frase que entra para evaluar. Si tenemos 0 es que no debemos evaluar dentro de Formato1. Salimos pues
Dim FinalFrase As String 'Para ver la primera limitación a evaluar
Dim Verfinal As String 'Para ver si el final de la cadena está en lo que buscamos.
FinalFrase = ", el, la, los, las, lo, un, una, unos, unas, y, que, con, de, del, o" 'Estas son las palabras que deberé evaluar para, previa coma y espacio antes, ver si existe
Verfinal = Trim(Mid(FRASE_ENTRA, PosicionComa)) 'Este es el final de la frase con la , y además sin espacios delante/detrás... Siempre que exista claro. Vamos a ver si existe
If InStrRev(FinalFrase, Verfinal) = 0 Then Exit Function 'Si es 0, no cumple con el formato1 directamente. Nos largamos.

FRASE_ENTRA = LCase(FRASE_ENTRA) 'La dejo toda en minúsculas, ya variaré mas adelante lo que proceda

Dim COMPONER_FRASE_SALIDA As String 'En esta variable voy a componer la frase adecuadamente, según se solicita cambiar
Dim EnFrase As String 'Aquí meteré la cadena a evaluar para lo que debo encontrar en LA frase
Dim PalaFrase As Variant 'Aquí dejo la variable para analizar todas las palabras que haya en la frase
Dim CuantasPalaFrase As Long 'Por si alguna vez hay que recurrir a una frase muy larga, pongo Long
Dim I As Long 'Por si algún dia fuera muy larga la frase

FinalFrase = ", el, la, los, las, lo, un, una, unos, unas, y, que, con, de, del, o" 'Estas son las palabras que deberé evaluar para, previa coma y espacio, ver si existe
EnFrase = "/el/la/los/las/lo/y/que/con/de/del/o/" 'Y esta son las palabras que deberé evaluar, para no ponerlas en mayúsculas
'OJO: he puesto las / (barras inclinadas) porque si evaluara una e solamente (pudiera estar en la frase), sí la encontraría, sin embargo no pertenece a una palabra, tan solo es un dígito y no valdría
    'De momento voy a quitar los posibles espacios que haya de mas entre palabras(tan solo pretendo dejar un espacio entre cada palabra, puede haber error de tecleo y haber mas de uno)
    Do While InStr(FRASE_ENTRA, "  ") > 0 'Observar que he puesto "  ", es decir dos espacios. Se evaluará el Do mientras existan dos espacios
    FRASE_ENTRA = Replace(FRASE_ENTRA, "  ", " ") 'Creo que está claro, pero es, Reemplaza "  " (dos espacios) por " " (un espacio)
    Loop

    'Recordad que si PosicionComa hubiera sido 0, no estaríamos aquí, por lo tanto la PosicionComa, tiene el valor que ahora usaremos
    'Le voy a quitar todos los espacios que hubiera en empiezo/final de cada una de las subpartes. Ya las juntaré con un espacio voluntariamente
    COMPONER_FRASE_SALIDA = Trim(Left(FRASE_ENTRA, PosicionComa - 1)) 'Ya tenemos la SEGUNDA parte (es la que pasaremos a detrás). Le quito 1, porque la posicioncoma es dónde está la coma. Y usamos trim para quitar cualquier espacio delante/detrás
    'MsgBox "composicion actual 1(" & COMPONER_FRASE_SALIDA & ")"
    COMPONER_FRASE_SALIDA = Trim(Mid(FRASE_ENTRA, PosicionComa + 1)) & " " & COMPONER_FRASE_SALIDA 'Ya tenemos la PRIMERA parte unida a la SEGUNDA parte... Aquí he puesto mi espacio voluntariamente
    'MsgBox "composicion actual 2(" & COMPONER_FRASE_SALIDA & ")"

    'Evidentemente nos metemos ahora con las palabras
    PalaFrase = Split(COMPONER_FRASE_SALIDA)
    CuantasPalaFrase = UBound(PalaFrase)
    COMPONER_FRASE_SALIDA = ""
    For I = 0 To CuantasPalaFrase 'Las vemos todas y las vamos colocando según el coincida o no el criterio que se pide
        If I = 0 Then
            PalaFrase(I) = UCase(Left(PalaFrase(I), 1)) & Mid(PalaFrase(I), 2) 'Para el caso de la primera palabra, va a ir Mayúscula su primer dígito
        Else
            'Ved lo que indico de arriba de las barras verticales. Aquí acoplo la palabra de búsqueda
            If InStr(EnFrase, "/" & PalaFrase(I) & "/") = 0 Then PalaFrase(I) = UCase(Left(PalaFrase(I), 1)) & Mid(PalaFrase(I), 2) 'Igual que para la primera palabra, las que no están EnFrase...
        End If
        COMPONER_FRASE_SALIDA = COMPONER_FRASE_SALIDA & PalaFrase(I) & " "
    Next
    'Voy a quitar el último espacio que tiene esta cadena que sale del For, y al mismo tiempo lo asigno a la variable que devolverá la frase cambiada según se solicita en Formato1
    
        
FORMATO_UNO = RTrim(COMPONER_FRASE_SALIDA)
'Y ahora te haré el favor DEFINITIVO, te toca hacer a tí el Formato2. Te cedo lo mejor "QUE APRENDAS" con este empujón.

End Function

Si te parece bien, tu debes poner la segunda parte (Formato 2), y luego que te cierren el hilo.

Por cierto he hecho una prueba con todo esto:

DEPROFUNDIS
NOMBRE
DESIERTO DE LOS TÁRTAROS, EL
YA ESTAN EN EL DESIERTO CON TARTARO, LOS
Y VIMIPAS HACIENDO UNA FUNCION EN EL DESIERTO, DE
, el, la, los, las, lo, un, una, unos, unas, y, que, con, de, del, o
POR EL DESIERTO vaN los TÁRTAROS
¿Y LOS TARTAROS DEL DESIERTO?, ¡QUE BIEN!,el

A ver si averiguas cuantos de los 6 registros que he puesto, NO cumplen con el formato 1.

Saludos
Gracias
Arriba
deprofundis Ver desplegable
Habitual
Habitual
Avatar

Unido: 18/Noviembre/2015
Localización: Madrid
Estado: Sin conexión
Puntos: 62
Enlace directo a este mensaje Enviado: 21/Enero/2016 a las 23:02
Hola VIMIPAS
Creo que de los 6 registros que has puesto no cumplen con el formato 1 los siguientes:

El 5:    POR EL DESIERTO vaN los TÁRTAROS

El 6:    ¿Y LOS TARTAROS DEL DESIERTO?, ¡QUE BIEN!,el

Ante todo muchas gracias VIMIPAS

Aunque no lo creas ver un ejemplo como éste me ayuda a aprender más que mil libros de teoría. Me permitirá hacer ensayos y afrontar la segunda parte, el segundo formato... La verdad es que que los comentarios en cada línea me servirán de mucho.

Te lo agradezco de verdad.
Un saludo

deprofundis
Arriba
VIMIPAS Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Enero/2006
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5220
Enlace directo a este mensaje Enviado: 22/Enero/2016 a las 00:16
Los comentarios están puestos para que aprenda/mos todos
Primer acierto (son esos dos registros)
Te falta el formato 2
Todos te esperamos
Saludos
Gracias
Arriba
deprofundis Ver desplegable
Habitual
Habitual
Avatar

Unido: 18/Noviembre/2015
Localización: Madrid
Estado: Sin conexión
Puntos: 62
Enlace directo a este mensaje Enviado: 23/Enero/2016 a las 09:03
Hola VIMIPAS
Estoy atascado en la siguiente línea:

COMPONER_FRASE_SALIDA = Trim(Left(FRASE_ENTRA, EnFrase))

No entiendo por qué no funciona...

Con esta línea le estoy diciendo que elimine espacios y extraiga de la izquierda de la cadena de texto Trim (Left(FRASE_ENTRA), la parte que es "/el/la/los/las/lo/y//que/con/de/del/o/" (EnFrase)

...Pero me dice que se ha producido el error 13 y que no coinciden los tipos.

Pensé que había hecho un razonamiento correcto pero no...

Saludos
deprofundis
Arriba
VIMIPAS Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Enero/2006
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5220
Enlace directo a este mensaje Enviado: 23/Enero/2016 a las 14:02
Hola deprofundis, buenos días.

Dice ahora deprofundis:

Con esta línea le estoy diciendo que elimine espacios y extraiga de la izquierda de la cadena de texto Trim (Left(FRASE_ENTRA), la parte que es "/el/la/los/las/lo/y//que/con/de/del/o/" (EnFrase)


Y decía emiliove antes:

 usar F1 y buscar las funciones de texto como: Left, Right, Len, Instr, InstrRev.


Y también decía vimipas:


'Creo que Emiliove tiene toda la razón del mundo, por eso te voy a hacer un favor que creo que te perjudicará mas que nada.


Efectivamente, se comprueba que te estoy perjudicando. Pero bueno, ya estoy en el meollo y voy a seguir demostrándo que te perjudico (si tu solo no sacas el formato2), no me gustaría que al final emiliove comprobara que nos ha dado, a ti y a mi, donde mas nos duele.

Así y todo, comprueba tu en mi código, como usar Left:

COMPONER_FRASE_SALIDA = Trim(Left(FRASE_ENTRA, PosicionComa - 1))

Por favor, cuando escribas Left, situa el cursor dentro de la palabra Left y pulsa F1, se te activirá la Ayuda necesaria.

Seguimos esperando a que lo consigas, tan solo con tu insistencia (ya veo que lo estás intentando, por eso sigo aquí) vas a conseguirlo.

Saludos



Editado por VIMIPAS - 23/Enero/2016 a las 14:04
Gracias
Arriba
deprofundis Ver desplegable
Habitual
Habitual
Avatar

Unido: 18/Noviembre/2015
Localización: Madrid
Estado: Sin conexión
Puntos: 62
Enlace directo a este mensaje Enviado: 24/Enero/2016 a las 21:20
Hola VIMIPAS

Ante todo decirte que no me perjudicas para nada... al contrario si solo tuviera como respuesta... -busca la funciones de texto con F1- , te aseguro que hace mucho que hubiera abandonado.
Realmente si algo me invita a seguir intentándolo y me estimula es tu ejemplo del "Formato 1".
Bueno... pues me voy a pasar la noche intentándolo y a ver qué consigo...

No olvides esta pregunta porque le pondré empeño.

Un saludo y muchas gracias VIMIPAS por todo.

Editado por deprofundis - 24/Enero/2016 a las 21:21
deprofundis
Arriba
-Marta- Ver desplegable
Moderadora
Moderadora
Avatar

Unido: 08/Septiembre/2005
Localización: Venus
Estado: Sin conexión
Puntos: 2970
Enlace directo a este mensaje Enviado: 26/Enero/2016 a las 01:58
hola

si aun andas liado con esto tengo por aqui una funcion que te puede servir para los dos supuestos

=creaFormato("INGENIOSO HIDALGO DON QUIJOTE DE LA MANCHA, EL")
te devuelve 
El Ingenioso Hidalgo Don Quijote de la Mancha

=creaFormato("EL INGENIOSO HIDALGO don quijote de la mancha")
te devuelve 
Ingenioso Hidalgo Don Quijote de la Mancha, el 

es mas o menos lo que necesitas, prueba y me cuentas

Private Function creaFormato(txtSinFormato As String)
Dim palabrasExcluidas As String
Dim subCadenas As Variant
Dim palabra As Variant
Dim cadenaFormateada As String

txtSinFormato = LCase(txtSinFormato)
palabrasExcluidas = "el la los las lo y que con de del o "

If InStr(1, txtSinFormato, ",") Then
   ' si en el texto encontramos una coma (,)?
   ' tomamos los caracteres que hay detras
   ' añadimos un espacio y el texto anterior a la coma
   txtSinFormato = Mid(txtSinFormato, InStr(1, txtTextoSinFormato, ",") + 2) & " " & Mid(txtSinFormato, 1, InStr(1, txtTextoSinFormato, ",") - 1)
   Else
     ' si no hay coma?, hacemos lo mismo invirtiendo el orden y añadiendo la coma y un espacio
     txtSinFormato = Mid(txtSinFormato, InStr(1, txtSinFormato, " ")) & ", " & Mid(txtSinFormato, 1, InStr(1, txtSinFormato, " "))
End If
  ' en los dos casos ya temenos nuestra cadena en el orden deseado

' partimos la cadena en palabras
subCadenas = Split(txtSinFormato, " ")

For Each palabra In subCadenas
    ' si la palabra procesada no se encuentra entre las excluidas
    If InStr(1, palabrasExcluidas, palabra) = 0 Then
       ' cambiamos a mayuscula la primera letra 
       palabra = UCase(Mid(palabra, 1, 1)) & Mid(palabra, 2)
    End If
    ' vamos dando forma a la cadena formateada
    cadenaFormateada = cadenaFormateada & " " & palabra
Next

' quitamos el molesto espacio del principio
cadenaFormateada = LTrim(cadenaFormateada)
' cambiamos a mayuscula la primera letra del texto y listo
creaFormato = UCase(Mid(cadenaFormateada, 1, 1)) & Mid(cadenaFormateada, 2)
End Function

un saludo
Arriba
deprofundis Ver desplegable
Habitual
Habitual
Avatar

Unido: 18/Noviembre/2015
Localización: Madrid
Estado: Sin conexión
Puntos: 62
Enlace directo a este mensaje Enviado: 27/Enero/2016 a las 19:16
Hola Marta

Pues sí... sigo liado con el tema pero la verdad que aunque lo he intentado, no consigo hacer el segundo formato a partir de la función de VIMIPAS... aún así he aprendido cosas que me están sirviendo para aprender este mundo de las funciones de texto, aunque creo que no las suficientes para solucionar el segundo formato que me propone.

Probaré tu función, Marta, y ante todo muy muy agradecido por la ayuda.

Un saludo

Editado por deprofundis - 27/Enero/2016 a las 19:17
deprofundis
Arriba
deprofundis Ver desplegable
Habitual
Habitual
Avatar

Unido: 18/Noviembre/2015
Localización: Madrid
Estado: Sin conexión
Puntos: 62
Enlace directo a este mensaje Enviado: 07/Febrero/2016 a las 18:53
Hola Marta

He estado mirando la función que me pasaste y quería comentarte unas cosillas...


----
La "private function" entiendo que se inserta en mi formulario imagino y no en un módulo.

Pero ¿cómo la llamo desde un combo que al seleccionar un valor modifica el formato del campo "TITULO"?
Es decir querría con la función cambiar el formato de un campo de nombre "TITULO" mediante evento "después de actualizar" de un combo "CboFormato"?

Sería algo así en el evento "despúes de actualizar" del combo???

Dim txtSinFormato as string
txtSinFormato = TITULO
creaFormato (txtSinFormato)

2º:
----
Sobre el IF...
If InStr(1, txtSinFormato, ",") Then
' si en el texto encontramos una coma (,)?
' tomamos los caracteres que hay detras
' añadimos un espacio y el texto anterior a la coma
   txtSinFormato = Mid(txtSinFormato, InStr(1, txtTextoSinFormato, ",") + 2) & " " & Mid(txtSinFormato, 1, InStr(1, txtTextoSinFormato, ",") - 1)

El problema de esto es que solo funciona si solo hay una coma en la cadena pero podría haber más y en ese caso no serviría...
El código debería referirse siempre a la última coma de la cadena.

Un saludo y gracias




Editado por deprofundis - 07/Febrero/2016 a las 18:54
deprofundis
Arriba
deprofundis Ver desplegable
Habitual
Habitual
Avatar

Unido: 18/Noviembre/2015
Localización: Madrid
Estado: Sin conexión
Puntos: 62
Enlace directo a este mensaje Enviado: 07/Febrero/2016 a las 18:58
Hola VIMIPAS
Al final no pude sacar el segundo formato a partir del primero que me tú me indicaste (respuesta del 20 de Enero de 2016)
...
Option Compare Database
Option Explicit

Public Function FORMATO_UNO(FRASE_ENTRA As String)

Dim PosicionComa As Long 'Por si algún día la frase es muy larga uso Long
PosicionComa = InStrRev(FRASE_ENTRA, ",") 'La busco por detrás de la cadena, de detrás hacia adelante, nos indican que debe estar al final
If PosicionComa = 0 Then Exit Function 'Buscamos en la frase que entra para evaluar. Si tenemos 0 es que no debemos evaluar dentro de Formato1. Salimos pues
Dim FinalFrase As String 'Para ver la primera limitación a evaluar
Dim Verfinal As String 'Para ver si el final de la cadena está en lo que buscamos.
FinalFrase = ", el, la, los, las, lo, un, una, unos, unas, y, que, con, de, del, o" 'Estas son las palabras que deberé evaluar para, previa coma y espacio antes, ver si existe
Verfinal = Trim(Mid(FRASE_ENTRA, PosicionComa)) 'Este es el final de la frase con la , y además sin espacios delante/detrás... Siempre que exista claro. Vamos a ver si existe
If InStrRev(FinalFrase, Verfinal) = 0 Then Exit Function 'Si es 0, no cumple con el formato1 directamente. Nos largamos.

FRASE_ENTRA = LCase(FRASE_ENTRA) 'La dejo toda en minúsculas, ya variaré mas adelante lo que proceda

Dim COMPONER_FRASE_SALIDA As String 'En esta variable voy a componer la frase adecuadamente, según se solicita cambiar
Dim EnFrase As String 'Aquí meteré la cadena a evaluar para lo que debo encontrar en LA frase
Dim PalaFrase As Variant 'Aquí dejo la variable para analizar todas las palabras que haya en la frase
Dim CuantasPalaFrase As Long 'Por si alguna vez hay que recurrir a una frase muy larga, pongo Long
Dim I As Long 'Por si algún dia fuera muy larga la frase

FinalFrase = ", el, la, los, las, lo, un, una, unos, unas, y, que, con, de, del, o" 'Estas son las palabras que deberé evaluar para, previa coma y espacio, ver si existe
EnFrase = "/el/la/los/las/lo/y/que/con/de/del/o/" 'Y esta son las palabras que deberé evaluar, para no ponerlas en mayúsculas
'OJO: he puesto las / (barras inclinadas) porque si evaluara una e solamente (pudiera estar en la frase), sí la encontraría, sin embargo no pertenece a una palabra, tan solo es un dígito y no valdría
    'De momento voy a quitar los posibles espacios que haya de mas entre palabras(tan solo pretendo dejar un espacio entre cada palabra, puede haber error de tecleo y haber mas de uno)
    Do While InStr(FRASE_ENTRA, " ") > 0 'Observar que he puesto " ", es decir dos espacios. Se evaluará el Do mientras existan dos espacios
    FRASE_ENTRA = Replace(FRASE_ENTRA, " ", " ") 'Creo que está claro, pero es, Reemplaza " " (dos espacios) por " " (un espacio)
    Loop

    'Recordad que si PosicionComa hubiera sido 0, no estaríamos aquí, por lo tanto la PosicionComa, tiene el valor que ahora usaremos
    'Le voy a quitar todos los espacios que hubiera en empiezo/final de cada una de las subpartes. Ya las juntaré con un espacio voluntariamente
    COMPONER_FRASE_SALIDA = Trim(Left(FRASE_ENTRA, PosicionComa - 1)) 'Ya tenemos la SEGUNDA parte (es la que pasaremos a detrás). Le quito 1, porque la posicioncoma es dónde está la coma. Y usamos trim para quitar cualquier espacio delante/detrás
    'MsgBox "composicion actual 1(" & COMPONER_FRASE_SALIDA & ")"
    COMPONER_FRASE_SALIDA = Trim(Mid(FRASE_ENTRA, PosicionComa + 1)) & " " & COMPONER_FRASE_SALIDA 'Ya tenemos la PRIMERA parte unida a la SEGUNDA parte... Aquí he puesto mi espacio voluntariamente
    'MsgBox "composicion actual 2(" & COMPONER_FRASE_SALIDA & ")"

    'Evidentemente nos metemos ahora con las palabras
    PalaFrase = Split(COMPONER_FRASE_SALIDA)
    CuantasPalaFrase = UBound(PalaFrase)
    COMPONER_FRASE_SALIDA = ""
    For I = 0 To CuantasPalaFrase 'Las vemos todas y las vamos colocando según el coincida o no el criterio que se pide
        If I = 0 Then
            PalaFrase(I) = UCase(Left(PalaFrase(I), 1)) & Mid(PalaFrase(I), 2) 'Para el caso de la primera palabra, va a ir Mayúscula su primer dígito
        Else
            'Ved lo que indico de arriba de las barras verticales. Aquí acoplo la palabra de búsqueda
            If InStr(EnFrase, "/" & PalaFrase(I) & "/") = 0 Then PalaFrase(I) = UCase(Left(PalaFrase(I), 1)) & Mid(PalaFrase(I), 2) 'Igual que para la primera palabra, las que no están EnFrase...
        End If
        COMPONER_FRASE_SALIDA = COMPONER_FRASE_SALIDA & PalaFrase(I) & " "
    Next
    'Voy a quitar el último espacio que tiene esta cadena que sale del For, y al mismo tiempo lo asigno a la variable que devolverá la frase cambiada según se solicita en Formato1
    
       
FORMATO_UNO = RTrim(COMPONER_FRASE_SALIDA)

End Function
------------------------------------------------------------

Lo he intentado y he aprendido en el intento pero no salí victorioso.

Podrías para cerrar el hilo indicar el segundo formato.

Un saludo y gracias VIMIPAS

Editado por deprofundis - 07/Febrero/2016 a las 19:00
deprofundis
Arriba
VIMIPAS Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Enero/2006
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5220
Enlace directo a este mensaje Enviado: 07/Febrero/2016 a las 19:47
Hola buenas tardes.

Pues:

Publicado originalmente por emiliove emiliove escribió:

Hola deprofundis

Y que has hecho o donde te atoraste, puedes comenzar por usar F1 y buscar las funciones de texto como: Left, Right, Len, Instr, InstrRev.

Y ya que estamos en eso dale una leída a las normas sobre todo la primera(1)

Ya nos cuentas, saludos.

Y apareció vimipas para meter la pata.

http://www.mvp-access.com/foro/curso-de-access-y-vba_forum19.html

Saludos
Gracias
Arriba
 Responder Responder Página  12>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable