Dudas sobre el uso de fórmulas en Excel creadas en celdas y la lectura de datos desde Visual Basic

Hola...
Ahora tengo otra inquietud... Resulta que cuando tu creas en una celda una fórmula la cual te arroja un resultado, este resultado puede ser por ejemplo 8.5625842 y el formato de celda se puede configurar para que muestre solo 3 decimales y quede así, 8.552. Bueno hasta ahí ok, pero resulta que cuando yo leo el dato desde Visual Basic, me lee todos los decimales que realmente da la fórmula como resultado y por lo tanto me creara el texto con todos ellos y así no me sirve...
Ya probé de la siguiente manera (por ejemplo):
txtX = Format(MyArea.Cells(a_fils, a_cols), "0.00")
Y todo bien, el resultado me lo da tal como lo quiero, el problema viene ahora, cuando en una celda ahí un dato ingresado por el usuario y este le da 4 decimales, el programa me lo entregaría con 3 y eso es lo que no quiero. En resumente quiero saber como obtener el formato de una celda para saber cuantos decimales tiene y luego aplicarlos a cada celda mientras el programa recorra las celdas...
Un saludo de SpeedCAD... :-)
1

1 Respuesta

540.875 pts. Por falta de tiempo para responder como me gusta...
La propiedad NumberFormat devuelve el formato numérico de una celda.
Es decir que puedes cargar tu variable txtX con ese atributo como argumento de Format.
Es decir:
txtX = Format(MyArea.Cells(a_fils, a_cols), MyArea.Cells(a_fils, a_cols).NumberFormat)
---
También puedes considerar la alternativa de usar un equivalente a la función REDONDEAR() dentro de VBA. De este modo efectivamente determinas la cantidad de decimales que tendrá la variable.
Por ejemplo:
VarRed = Application.WorksheetFunction.Round(555.698,2)
Cargará 555.70 en Barred.
Espero que esto te ayude.
---
Respecto a tu pregunta anterior, es correcto lo que hiciste. Sin embargo hay redundancia. Si "Columna" está definido como boolean no es necesario colocar en el condicional:
If Columna = True then
basta con:
If Columna Then
Además, como lo utilizas inmediatamente después de cargar la variable estarías forzando un paso más (sin contar el de declarar la variable). Puedes colocar la instrucción directamente en el IF, con lo cual vuelves a algo parecido a lo que te había indicado en aquella primera respuesta.
---
Finalmente, vi la página que me sugeriste. Como te dije, no conozco AutoCAD y la posibilidad de leer datos de MS Excel está dentro de aquel programa. Bien por ti, que lo encontraste.
Te mando un abrazo grande
Fernando
Muchas gracias Fernando, me solucionaste el problema, solo le tuve que agregar una sola cosa, que es lo siguiente:
decimales = MyArea.Cells(a_fils, a_cols).NumberFormat
If decimales = "General" Then
txtX = MyArea.Cells(a_fils, a_cols)
ElseIf decimales <> "General" Then
txtX = Format(MyArea.Cells(a_fils, a_cols), decimales)
End If
Tuve que hacer esto porque cuando el formato era general en vez de poner, por ejemplo, un 1 pone GoGenral o algo así, entonces puse el código de arriba y todo bien...
Ahora con respecto a lo de vincular el dato de la celda con AutoCAD, no he encontrado la solución, solo me imagino que se debe hacer con atributos de AutoCAD porque este tiene un identificador que de alguna manera esta vinculado con la celda de excel...
Bueno te mando un gran abrazo, y si algún día pillo la solución al problema seras el primero en saberlo...
Y no dudes en que te seguiré preguntando
Un saludo de SpeedCAD... :-)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas