jueves, 21 de septiembre de 2017

VBA: Los Separadores del Sistema en nuestras macros

Vamos a repasar unas propiedades de la aplicación, de Excel, que nos pueden ser útiles en diferentes ocasiones.
Por ejemplo, cuando trabajamos con nuestras macros en entornos internacionales y nuestros compañeros de trabajo emplean una configuración decimal-miles de sistema distinto al nuestro.


Veremos en concreto, y entre otras, las propiedades:
Application.UseSystemSeparators
Application.DecimalSeparator
Application.ThousandsSeparator


La propiedad Application.UseSystemSeparators activa o desactiva el uso de los separadores del sistema.
Mientras que los otros dos:
Application.DecimalSeparator
Application.ThousandsSeparator

permiten personalizar los caracteres a emplear tanto para el separador de miles como para el decimal...


Otra propiedad interesante es la que nos permite cambiar el estio de referencia de celdas entre A1 y F1C1, la propiedad en cuestión es:
Application.ReferenceStyle


En un módulo estándar de nuestro explorador de proyecto VBA insertamos el siguiente código:

Sub SeparadoresDelSistema()
'vemos en un mesnaje el estilo de referencia en este momento
Dim strEstilo As String
If Application.ReferenceStyle = xlA1 Then
    MsgBox "El estilo de referencia actual es A1"
Else
    MsgBox "El estilo de referencia actual es F1C1"
End If
'cambio de estilo de referencia a F1C1
Application.ReferenceStyle = xlR1C1

'componemos texto informativo con los separadores actuales de nuestro equipo
Dim strDecimal As String, strMiles As String
strDecimal = Application.International(xlDecimalSeparator)
strMiles = Application.International(xlThousandsSeparator)

MsgBox "Antes del cambio " & vbCrLf & _
    "El separador decimal actual es: " & strDecimal & vbCrLf & _
    "El separdor de miles actual es: " & strMiles

'Cambiamos los separadores del sistema
With Application
    'deshabilitamos los separadores
    .UseSystemSeparators = False
    'marcamos cuálkes son los separadores deseados
    .DecimalSeparator = "."
    .ThousandsSeparator = ","
End With

'componemos texto informativo con los separadores actuales
'tras el cambio en nuestro equipo
strDecimal = Application.International(xlDecimalSeparator)
strMiles = Application.International(xlThousandsSeparator)

MsgBox "Después del cambio " & vbCrLf & _
    "El separador decimal actual es: " & strDecimal & vbCrLf & _
    "El separdor de miles actual es: " & strMiles & vbCrLf & _
    "El estilo de referencia es: F1C1"

'para activar de nuevo los separadores del Sistema
Application.UseSystemSeparators = True

'retornamos al estilo de referencia a A1
Application.ReferenceStyle = xlA1
End Sub



En mi caso parto de una configuración con:
Separador de miles un punto .
Separador decimal una coma ,

Vemos en dos imágenes el cambio producido al ejecutar nuestra macro:

VBA: Los Separadores del Sistema en nuestras macros



Y en un otro paso:

VBA: Los Separadores del Sistema en nuestras macros

3 comentarios:

  1. Hola Ismael,
    Paso a saludarte y felicitarte por el trabajo que realizar.
    Quisiera saber en este caso, porque en los dos mensajes msgbox que haz lanzado, el separador decimal es "," y el separador de miles es "," ; No debería cambiar esto al ejecutar el procedimiento sub tanto en el mensaje como en la celda (6,3). Saludos desde Perú.

    ResponderEliminar
  2. Perdón quise decir :
    Separador decimal es "," y el separador de miles es "." .
    y en la celda (3,6)

    ResponderEliminar
    Respuestas
    1. Gracias!
      se me coló otra imagen de prueba
      Saludos

      Eliminar