Problemas con función CDbl en excel VBA

Resulta que tengo en un formulario varios valores numéricos que debo colocar en las celdas de la hoja, todos los datos están registrados en algunos textbox y unos cuantos labels, pero tengo un problema con ellos:

1) Algunos de estos valores se deben sumar o multiplicar, y para esto tengo un botón que al dar clic me realiza la operación correspondiente, excepto que luego de que coloco la función cdbl en los campos que voy a sumar o multiplicar, el botón no realiza la operación solicitada, es decir, ni suma, ni multiplica. (Anexo pantallazo)

2) A la hora de dar clic en el botón guardar, si tengo algún dato vacío, saca error, es decir, me exige que debo llenar todos los campos donde tengo la función cdbl programada. (Anexo pantallazo).

Como pueden ver la imagen, tengo 6 campos vacíos de facturas y valor de facturas, que no lleno porque no los necesito, pero saca error precisamente en el primer campo que dejo vacío que es el valor de la 3er factura.

Si alguien sabe como solucionar este error, seria fabuloso.

3 Respuestas

Respuesta

[Hola

1) No has colocado/comentado como ingresas esos valores a los "TextBox", como les das formato y/o como multiplicas esos valores. Sin esos detalles es difícil ayudarte a plantear alguna solución.

2) Ese error ocurre porque estás intentando/forzando convertir "nada" en un valor tipo "double". Debes o controlar eso mediante un "if" o quizá usar (yo no recomiendo usarlo a menos que sea estrictamente necesario) "On Error Resume Next".

Comentas

Abraham Valencia

Hola Abraham, como estás? muchas gracias por querer ayudarme.

1) Te anexo el pantallazo de como están los campos Valor en $, TRM y valor USD $ (evento change), así como el botón que calcula la multiplicación de los textbox.

Y en el botón guardar te resalto el código donde está la función CDBL, que no me genera errores para almacenar los datos.

2) cuando me dices que quiero convertir "nada" en "double" te refieres específicamente a que debo crear variables para controlar estos valores numéricos? o que debo crear un IF para controlar que si el valor esta vacío, realice la función o como es que me dices? si no te molesta, me podrías por favor, explicar que es lo que estoy haciendo mal?

Ahí si que me salieron muchas dudas porque como están los datos en un botón que guarda toda la información del formulario y no sabría como crearle la condición...

Muchas gracias.

Dado que hay varios objetos y es complicado saber qué es qué, sugiero que coloques tu archivo en algún "Drive" y compartas por aquí el enlace para poder ver y ayudarte mejor. Si deseas borra/elimina todo lo que no quieras que se vea.

Abraham Valencia

Claro que si, tengo una nube en Dropbox.

usuario: [email protected]  contraseña: examenfinal123

Alli hay un archivo que se llama prueba, ahi esta lo que te he expuesto en los mensajes anteriores.

En este formulario de recibos, cuando selecciono el cliente desde el primer combobox, automáticamente se cargan las facturas correspondientes en los combobox de facturas y al seleccionar cada una, se carga el valor según el numero de factura.
Si puedes observar los valores de factura tienen formato de moneda ($ 4.500.000, por ejemplo), pero cuando voy al botón calcular totales no suma ni multiplica, sino que pone 0, y realmente no se si es por la función CDbl o que será. Selecciona por ejemplo el cliente AEROMEXICO, quien tiene 3 facturas a cargo.
Ademas, cuando voy a guardar, si tengo facturas o valores vacíos, me genera un error, y me señala específicamente donde tengo el valor de factura vacío (es decir, en el ejemplo de AEROMEXICO, cuando se genera el error, me señala la 4a factura, que es la que está vacía).
Muchas gracias por tu ayuda.

[Hola

Lo primero es recordar que los "TextBox", como lo dice su nombre al traducirlo, son "cajas de texto", entonces al colocar un número con formato en ellos (Format(txtvalor4, "$ #,##0")), no estás en realidad dando un formato propiamente dicho como ocurre en las celdas (en donde se mantienen los valores numéricos -ver barra de fórmulas- pero en la celda se ve con formato) sino que estás dejando un texto en ellos, es decir, no estás colocando un número con formato en cada "TextBox" sino que estás colocando texto dado que hay un símbolo de moneda.

Una manera de que puedas usar esos textos como valores es que reemplaces los símbolos es que en lugar de tener algo así:

txtvalneto1.Text = Val(txtvalor1.Text) - Val(txtrf1.Text)

Coloques así:

txtvalneto1.Value = Format(Replace(txtvalor1.Text, "$", "") - Replace(txtrf1.Text, "$", ""), "$ #,##0")

Tendrías que hacer lo mismo para todos los caso.

Sobre no tener errores cuando no hay datos, prueba lo que te han aconsejado.

Saludos]

Abraham Valencia

Respuesta

Reconozco que no tengo ni idea de Excel, pero para "evitar" los nulos tienes la función Nz, que o bien te transforma los nulos en ceros, o bien te lo transforma en lo que quieras. Por ejemplo

Nz([sueldo]) Si sueldo es nulo te devuelve 0

Nz([sueldo],3) Si sueldo es nulo te devuelve 3

En tu caso, supongo que podrás poner(en Access si se puede)

Cdbl(nz(txtvalor3. Value))

Respuesta

Según tu imagen

En el txtvalor3 tienes vacío o nulo.

Como bien comentan, tienes que validar el contenido del txtvalor3, puede ser esta forma:

    If txtvalor3.Value = "" Then
        t3 = 0
    Else
        t3 = txtvalor3.Value
    End If
    ActiveCell.Value = CDbl(t3)

Si el valor es vacío entonces en otra variable lo pones como 0.


Puedes abreviar el if en la variable de esta forma:

    t3 = IIf(txtvalor3.Value = "", 0, txtvalor3.Value)
    ActiveCell.Value = CDbl(t3)

Sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas