Dar formato concreto a un campo del formulario

Es una pregunta para Jacinto Trillo

Hola Jacinto

Me gustaría crear un combo con 2 valores para elegir el formato del campo "Título" :

1º Valor del combo: que al margen de en qué formato esté escrito (mayúsculas, minúsculas, etc.)

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

Aquí deben establecerse 2 condiciones... Que sea la última palabra de la cadena y que esté precedida de un espacio y una coma.

Serían cadenas con los siguientes vocablos al final:

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

Se reubican ahora al principio de la cadena y se elimina la última coma y espacio tras ella.
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".
2º valor del combo: que al margen de en qué formato esté escrito (mayúsculas, minúsculas, etc.)

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

Aquí solo establecemos una condición... Que la primera palabra sea:

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

Se desplaza al final del texto en minúsculas y se antepone una coma y espacio.

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".

Querría realizarlo mediante dos funciones, una se aplicará al valor 1 del combo, entiendo que en evento "after update" llamándola y otra al valor 2.

1 Respuesta

Respuesta
1

Rafa: Tengo dificultades de interpretar tu pregunta.
Comentas… combo con 2 valores para elegir el formato……, y no sé de dónde quieres sacar esos dos valores.
Tema aparte es la de crear una Función que partiendo de una cadena, podamos cambiar su presentación.
No lo he intentado en el sentido que tú lo expones. Ahora ando bastante ocupado, pero cuando tenga un hueco veo si sé resolverlo.
Entre tanto, y referente al uso de ComboBox, un ejemplo de Sveinbjorn expone muy bien cómo sacarles rendimiento. El mismo lo ha citado en una respuesta reciente.

http://siliconproject.com.ar/neckkito/index.php/component/content/article/96-ejemplos-explicados/ejemplos-de-controles/311-cuadros-combinados-inteligentes

En cuanto a la Función, mi sugerencia es que repitas la pregunta sin dirigirla a nadie y quizá alguien lo tenga resuelto y te conteste. Si lo hace estupendo para ti y a mí me libera ese tiempo. Mis saludos >> Jacinto

Hola Jacinto

Bueno la verdad es que confío plenamente en tus conocimientos... de todas formas la consultaré con otros.

En todo caso me gustaría conseguir justo eso: una función que partiendo de una cadena, podamos cambiar su presentación

Y en cuanto al combo me refería a poner en:

tipo de origen de la fila: una lista de valores

y en origen de la fila los valores: "Formato 1; Formato 2;"

Siendo el Formato 1 tipo "El Desierto de los Tártaros" y el  formato 2 "Desierto de los Tártaros, el" como te comentaba al principio de la pregunta. Así desde el combo, después de actualizar aplicaría la función de los formatos.

Bueno... pues si tienes un hueco en algún momento como me comentabas, me dices algo... Como si es la semana que viene o cuando puedas. Ya te digo que no hay prisa y huelga decir que, en ese sentido no te sientas apremiado.

Un saludo y gracias por la ayuda

Rafa: De acuerdo . Mis saludos >> Jacinto

Rafa: Las funciones iniciales a partir de las que puedes formatear el Texto de entrada de un Título son éstas:

Function ArticuloTituloAlPrincipio(ByVal Texto As String) As String
'RESUMEN: Convierte >> Histórias de Madagascar, Las en >> Las Histórias de Madagascar
On Error GoTo ArticuloTituloAlPrincipio_TratamientoErrores

Dim ParteIniConvertida As String, ParteFinConvertida As String
Dim PrimerEspacio As Long, PosicComa As Long, LongTexto As Long, PPartidaFinal As Long

PrimerEspacio = InStr(Texto, Chr(32)) 'Chr(32) >> PrimerEspacio " "
PosicComa = InStr(1, Texto, Chr(44)) 'Chr44 >> Coma
'LongTexto = Len(Texto) 'Longitud TOTAL del Texto

If IsNull(PosicComa) Or PosicComa = 0 Then
ArticuloTituloAlPrincipio = LTrim(Texto)
Exit Function
Else
If PrimerEspacio = 0 Or PosicComa + 1 <> PrimerEspacio Then
PPartidaFinal = PosicComa + 1
GoTo CambiaElTexto
Else
PPartidaFinal = PosicComa + 2
GoTo CambiaElTexto
End If
End If

CambiaElTexto:

'Extrae TODO lo que hay después de la "coma"
ParteIniConvertida = Mid(Texto, PPartidaFinal)

'La segunda Parte del Nombre Convertido es TODO lo que hay Antes de la Coma >> PosicComa-1
ParteFinConvertida = Mid(Texto, 1, (PosicComa - 1))

ArticuloTituloAlPrincipio = LTrim(ParteIniConvertida & " " & ParteFinConvertida)

Exit Function
ArticuloTituloAlPrincipio_Salir:
On Error GoTo 0
Exit Function
ArticuloTituloAlPrincipio_TratamientoErrores:
MsgBox "Error " & Err.Number & " en proc.: ArticuloTituloAlPrincipio de Modulo: MdlFuncionesTexto (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume ArticuloTituloAlPrincipio_Salir
End Function 'ArticuloTituloAlPrincipio(Texto As String) As String

Public Function ArticuloTituloAlFinal(ByVal Texto As String) As String
'Esta Funcion analiza el Titulo de un Libro en el Formato >> Los Pueblos de Montaña >>Para pasarlo al Formato >> Pueblos de Montaña, Los
'Para ello busco el Primer espacio en la cadena.

Dim PrimerEspacio As Long
Dim ParteIzquierda As String, ParteDerecha As String
PrimerEspacio = InStr(Texto, Chr(32)) 'Chr(32) >> Espacio " "

ParteIzquierda = Nz(Left(Texto, (PrimerEspacio - 1)), "")
ParteDerecha = Mid(Texto, (PrimerEspacio + 1))

Select Case ParteIzquierda
Case "con", "de", "del", "el", "las", "lo", "los" 'Tambien la pone en Minusculas en estos casos
ArticuloTituloAlFinal = ParteDerecha & ", " & ParteIzquierda
Case Else
ArticuloTituloAlFinal = Texto
End Select

End Function

Puedes hacer combinaciones con otras que ya tengas. Saludos >> Jacinto

Hola Jacinto

He puesto las funciones en un módulo y ahora he creado un combo en el formulario para poder seleccionar el "formato 1" o "formato 2" que corresponden a cada una de las funciones...

Para el combo he puesto:

en tipo de origen de la fila: lista valores

Origen de la fila: "Formato 1"; "Formato 2"

y despues en evento "after update" del combo:

if CboFormato.value = "formato 1" then

ArticuloTituloAlPrincipio (me.TITULO)

End if

if CboFormato.value = "formato 2" then

ArticuloTituloAlFinal (me.TITULO)

End if

Pero no me funciona... tal vez me falta algo en las propiedades del combo o a la hora de llamar a la función... el caso es que no hace nada.

Ya me dices... Un saludo

Finalmente lo de llamar a la función lo resolví así:

Para el combo he puesto:

En tipo de origen de la fila: lista valores

Origen de la fila: "Formato 1"; "Formato 2"

Y después en evento "after update" del combo:

if CboFormato.value = "formato 1" then

Me.TITULO = ArticuloTituloAlPrincipio (Me.TITULO)

End if

if CboFormato.value = "formato 2" then

Me.TITULO = ArticuloTituloAlFinal (Me.TITULO)

End if

Un saludo y ya te comento

Rafa: ¿Entiendo qué debo de dar por resuelto éste tema?

Creo que lo mejor sería eso y si tienes complementos generas una nueva pregunta.

Saludos >> Jacinto

Hola Jacinto

Al final no pusimos las excepciones dentro de la cadena de texto que te formulé en la pregunta también, pero no importa, ya creo otra pregunta para eso y algún detalle que falta y como siempre agradecerte tu ayuda inestimable y tu dedicación.

Un saludo Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas