Visual Basic para Aplicaciones - Error al dividir entre decimal separado por coma Visual Basic

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 4
Ha disminuido su posición en 3 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Error al dividir entre decimal separado por coma Visual Basic

Publicado por Luis Enrique (3 intervenciones) el 02/06/2017 17:07:09
Hola a todos!

Me estoy matando la cabeza tratando de entender porqué cuando ejecuto una macro con configuración de decimales separado por punto se ejecuta bien y cuando el ordenador tiene la configuración de decimal separado por coma la macro se detiene, no funciona justo en la instrucción donde se divide por el valor decimal.

¿Cómo evitar esto? ¿Existe alguna instrucción para cambiarlo? ¿Visual Basic mantiene el formato americano?

Les agradecería muchisimo su ayuda!
Saludos!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.101
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Error al dividir entre decimal separado por coma Visual Basic

Publicado por Antoni Masana (374 intervenciones) el 05/06/2017 09:09:03
No se si he entendido bien tu problema, pero en principio o en teoría los números guardados en el Excel funcionan igual independientemente del separador decimal definido en Windows, otro problema son los números externos o definidos en la Macro.

Puedes hacer dos cosas según necesites, buen una de ellas la que mejor te solucione el problema.

1.- Forzar el tratamiento con un separador determinado

2.- Condicionar la operación a la configuración

Ejemplo:
1
2
3
4
5
IF GetValueCR(14)="." Then
       Pi = 3.1415
    Else
       Pi = 3,1415
    End If

Código para la primera opción. (Esto lo tuve que usar para Tratar un fichero que con la configuración cambiada y solo me funcionaba en aquellos Windows que tuviese la misma configuración).

Inicio Macro
1
2
3
4
5
6
7
    ' </> ---&--- </>  Cofiguracion de numeros
 
    c_Mil = GetValueCR(15)
    c_Dec = GetValueCR(14)
 
    SetLocaleInfo &H400, 15, ","        'Separación de miles
    SetLocaleInfo &H400, 14, "."        'Separador decimal


Final de la Macro
1
2
3
4
5
6
    ' </> ----------------------------------------------------------------- </>
    ' </> ---&--- </>  Restaura el entorno y la impresora
    ' </> ----------------------------------------------------------------- </>
 
    SetLocaleInfo &H400, 15, c_Mil      'Separación de miles
    SetLocaleInfo &H400, 14, c_Dec      'Separador decimal

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 4
Ha disminuido su posición en 3 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Error al dividir entre decimal separado por coma Visual Basic

Publicado por Luis (3 intervenciones) el 15/06/2017 15:28:05
Hola Antoni, gracias por tu respuesta!.

Me he decidido a cambiar la configuracion de la macro para que cambie el separador de decimales a punto en vez de coma, pero pongo las instrucciones y no me va, tengo que definir la funcion antes? y si si, cómo la podría definir?

c_Mil = GetValueCR(15)
c_Dec = GetValueCR(14)

SetLocaleInfo &H400, 15, "," 'Separación de miles
SetLocaleInfo &H400, 14, "." 'Separador decimal

Al terminar la macro:
SetLocaleInfo &H400, 15, c_Mil 'Separación de miles
SetLocaleInfo &H400, 14, c_Dec 'Separador decimal

Muchas gracias por tu aporte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.101
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Error al dividir entre decimal separado por coma Visual Basic

Publicado por Antoni Masana (374 intervenciones) el 16/06/2017 07:42:11
El trozo de código lo utilice para exportar ficheros que tenían la configuración decimal invertida con respecto a la máquina y era un Visual Basic, no en Excel.

Ahora concretemos en tu problema.

¿Que haces exactamente para tener el problema?
¿Cómo puedo simularlo?

He realizado una prueba:

Opción 1 - Punto -> Decimal | Coma Miles
Opción 2 - Coma -> Decimal | Punto Miles

Y he ejecutado esta macro perfectamente en los dos casos:

1
2
3
4
5
Option Explicit
 
Sub Calcula()
    Cells(2, 1) = Cells(1, 1) * 2.5
End Sub

Independientemente de cómo vea los datos en la hoja, la macro utiliza el punto para los decimales en las constantes y para evaluar el contenido de las celdas.

El problema radica cuando se lee datos externos que los interpreta según la configuración.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar