Colaboración de Harvey Triana (1)

Rutina para convertir una cadena en formato título

Lo que nos dice el autor sobre esta rutina:

Función para Convertir Sartas Simples a Titulos
===================================
Hace un par de años programe una base de datos en Access Basic.
Me molestaba que los usuarios no usaran mayúsculas en los campos que estaban destinados para títulos o nombres propios.
P.e. el titulo « Gerencia de Producción » lo escribían como « gerencia de producción » .
Pues bien, escribí la función SpanishTitle, la cual convierte cualquier variable en una cadena tipo titulo :

Por ejemplo :

x = SpanishTitle("esto es un titulo")

Retorna :

"Esto es un Titulo"

Uso la función en los eventos AfterUpdate de los campos respectivos.
En los programas de Visual Basic que emplean el motor de base de datos Access se puede usar en el evento Validate del Data Control.

DefInt A-Z
Public Function SpanishTitle(ByVal x As Variant) As Variant

    Const Void = "", SP = " ", IL= "|"
    
    Static LockWords As String

    Dim Str As String, Word As String, Change, Ptr

    If IsNull(x) Then
       SpanishTitle = Null
       Exit Function
    End If

    If LockWords = Void Then
       LockWords = "a|ante|bajo|con|contra|de|desde|hasta|para|por|segun|sin|sobre|tras|y|al|la|el|en|del|los|las|que|es|"
    End If

    x = LTrim$(RTrim$(CStr(x)))
    Do
      'Get Word:
       Ptr = InStr(x, SP)
       If Ptr Then
          Word = RTrim$(Left$(x, Ptr))
          x = LTrim$(Mid$(x, Ptr))
       Else
          Word = x
       End If
      
      'Change Word
       Change = True
       If Not Str = Void Then
          If InStr(LockWords, Word + IL) Then
             Change = False
          End If
       End If
       If Change Then
          Word = UCase$(Left$(Word, 1)) + Mid$(Word, 2)
       End If
       Str = Str + Word + IIf(Ptr, SP, Void)
       
    Loop Until Ptr = 0

    SpanishTitle = Str

   'Programmed by Harvey Triana ©
End Function