Problema Excel VBA: error con decimales

Estimad@s, les pido ayuda con un problema que me está desesperando.
Programé un sistema de gestión de compras con macros y formularios. Funcionó sin inconvenientes durante 2 años en una empresa, pero ahora comenzaron a usarlo en otra computadora y se genera un problema que no he podido solucionar.
Para registrar la recepción de los artículos comprados, el usuario debe seleccionar el artículo, el proveedor y el lugar de recepción (combos), completar datos en TextBox (fecha y cantidad) y se carga todo en un ListBox (cada dato se separa con vbTab). Luego, al presionar el botón Grabar, el código recorre el ListBox, y escribe los datos de la recepción en una hoja oculta.
Ahí es donde aparece el problema. Si en el ListBox se cargan cantidades con decimales, esos decimales desaparecen al ser escritos en la hoja oculta, porque no se está tomando el separador de decimales. Por ejemplo, si en el ListBox dice que se recibieron 125,54 kg. De un artículo, en la hoja se carga como 12554.
Lo que no entiendo es que hasta estoy verificando el separador de decimales que está en uso por Excel antes de pasar el dato al ListBox, de esta manera:
If Application.DecimalSeparator = "." Then
dblCant = Replace(Trim(TextBox1.Text), ",", ".")
Else
dblCant = Replace(Trim(TextBox1.Text), ".", ",")
End If
Y luego, al pasar del ListBox a la hoja de carga, tengo un código como este:
For i = 0 to ListBox1.ListCount - 1
arrReg = Split(ListBox1.List(i), vbTab)
....
dblCant = Cdbl(arrReg(4))
...
Cells(intFila, 6).Value = dblCant
intFila = intFila + 1
Next
Hace unos días fui a la empresa y me di cuenta de que en esa computadora, misteriosamente, el Cdbl del 2do. Bloque de código estaba generando un problema. Lo borré, ahora queda:
dblCant = arrReg(4)
Y pareció funcionar, ¡Pero ahora me avisan de la empresa de que volvió a fallar! Las cantidades decimales se están cargando sin que se respete el separador decimal...
Ya no sé qué hacer. Además de hacer ese cambio, revisé tanto la configuración del sistema operativo como la de Excel, asegurándome de que ambos usaran el mismo separador. Un dato más: el sistema operativo es Windows XP y la versión de Office, 2010. XP en español, Office en inglés...
Este problema me está desesperando, doy vueltas y vueltas, intento todo lo que puedo, pero no encuentro la solución.
Sospecho que no es problema de código, sino probablemente de conflicto entre alguna configuración del sistema y de Excel, o incluso por estar en distintos idiomas... Pero no he sido capaz de encontrar la solución.
Si alguien puede ayudarme, le estaré muy agradecido.

1 respuesta

Respuesta
1

Leí todo tu articulo y estoy tan desconcertado como tu, pero recordemos que en el idioma ingles los separadores de decimales son . (puntos) quizás es eso lo que esta pasando que al estar estableciendo, (comas) el mismo excel lo este eliminado por considerarlo un error. Otra cosa que podrías verificar es el formato de celdas, si esta en tipo numérico y cuantos decimales acepta y si la opción de redondeo esta activa... por ultimo podrías probar reinstalar el office por completo pero en español

¡Gracias! 

Justamente el Application.DecimalSeparator... detecta qué separador está en uso y si la persona escribió el que no está en uso, lo reemplaza.

El formato de las celdas donde se escriben las cantidades es general; no debería tener problemas. Las opciones de configuración de decimales, no estoy en la empresa ahora para corroborarlo, pero creo que son las normales, por defecto.

Cada vez me inclino más a pensar que es un problema de instalación de Office, y coincido que lo mejor sería que lo reinstalen en español.

Bien entonces coincidimos, reemplaza el office. Y cuéntanos como te va

Y si no debería haber problemas, pero a mi una vez me paso que las cantidades las tomaba en formato texto y no en formato numérico generando problema en otros sistemas, por eso lo sugerí...

Bien, el problema es un conflicto entre las configuraciones de Windows y Office, y la mejor solución sería reinstalar Office. Pero en una empresa esto lleva tiempo y en otro foro me pasaron una solución alternativa, un "parche" que funciona. Hay que tener en cuenta que Excel toma la configuración de decimales del sistema operativo. Teniendo eso claro, el siguiente código es bastante transparente:
dblCant = Trim(TextBox1.Text)

strDec = Mid(1 / 2, 2, 1)

dblCant = Replace(Replace(dblCant, ",", strDec), ".", strDec)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas