Inicio > Microsoft Excel > fejoal > mmm yo, si yo de nuevo

mmm yo, si yo de nuevo

Experto:
Usuario:
Fecha: 07/09/2008
Valoración: (5,00 sobre 5) Categoría: Microsoft Excel
07/09/2008
speedcad, usuario preguntando en Microsoft Excel
Usuario
Hola...

Ahora tengo otra inquietud... resulta que cuando tu creas en una celda una formula 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 asi, 8.552. Bueno hasta ahi ok, pero resulta que cuando yo leo el dato desde Visual Basic, me lee todos los decimales que realmente da la formula como resultado y por lo tanto me creara el texto con todos ellos y asi no me sirve...

Ya probe 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 ahi un dato ingresado por el usuario y este le da 4 decimales, el programa me lo entregaria 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... :-)
07/09/2008
speedcad, experto respondiendo en Microsoft Excel
Experto

Hola, SpeedCAD!

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 VarRed.

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 despues 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 vuleves 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 posibilida de leer datos de MS Excel está dentro de aquel programa. Bien por ti, que lo encontraste.

Te mando un abrazo grande
Fernando
07/09/2008
speedcad, usuario preguntando en Microsoft Excel
Usuario
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 asi, entonces puse el codigo de arriba y todo bien...

Ahora con respecto a lo de vincular el dato de la celda con AutoCAD, no he encontrado la solucion, 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 algun dia pillo la solucion al problema seras el primero en saberlo...

Y no dudes en que te seguire preguntando

Un saludo de SpeedCAD... :-)
Enlaces patrocinados