Columna Listbox

De nuevo apelo a tu experiencia para intentar solucionar un problema que me lleva de cabeza.
Tengo un Userform para controlar facturas con cuatro botones (No vencidas/Vencidas/Pagadas/Todas) en un solo listbox, además de un textbox donde me devuelve la suma de una columna de "importes" del listbox según el botón seleccionado. Los datos se toman de una tabla en una hoja del mismo libro.
El problema es el siguiente, aunque la columna "importes" de la tabla está formateada a moneda con dos decimales (Euro), la columna de importes del listbox por defecto me devuelve los valores sin formatear, algunos sin decimales, otros con uno, otros con dos. A su vez la suma que traslada al textbox no es correcta, me imagino que debido a la falta de decimales de la columna del listbox.
He probado de darle formato a la columna del listbox y me lo pone correctamente, pero la suma que devuelve al textbox es aún más incoherente.
Te copio el código de uno de los botones ya que todos son iguales evidentemente cambiando los datos de visualización de columnas. Al final te copio también el código del textbox (muy simple, solo para el formato moneda).
Private Sub CommandButton1_Click()
'
On Error Resume Next
Application.ScreenUpdating = False
Sheets("Todas Fras.").Visible = True
ListBox1.Clear
Sheets("Todas Fras.").Select
Range("F1").Select
ListBox1.ColumnCount = 6
ListBox1.TextAlign = fmTextAlignCenter
'
For T = 1 To 3500
If ActiveCell = "NO PAGADA" Then
ListBox1. AddItem ActiveCell
ListBox1. List(ListBox1.ListCount -1,1) = ActiveCell.Offset(0,-5)
<span class="Apple-tab-span" style="white-space: pre;"> ListBox1.List(ListBox1.ListCount -1,</span>2<span class="Apple-tab-span" style="white-space: pre;">) = ActiveCell.Offset(0,-</span>4<span class="Apple-tab-span" style="white-space: pre;">)</span>
ListBox1. List(ListBox1.ListCount -1,3) = ActiveCell.Offset(0,-3)
ListBox1. List(ListBox1.ListCount -1,4) = ActiveCell.Offset(0,-2)
ListBox1. List(ListBox1.ListCount -1,5) = ActiveCell.Offset(0,5)
Listbox1.List(ListBox1.ListCount -1,4) = Format(ListBox1.List(ListBox1.ListCount -1,4), "#,##0.00€")
End If
ActiveCell.Offset(1,0).Select
Next
For i = 0 To ListBox1.ListCount -1
tot = tot + Val(ListBox1.List(i,4)
Next i
TextBox1 = tot
Sheets("Todas Fras.").Visible = False
End Sub
Private Sub TextBox1_Change()
TextBox1.Value = Format(TextBox1, "#,##0.00€")
End Sub
A la espera que puedas ayudarme,

1 respuesta

Respuesta
1
No estoy seguro de comprender en su totalidad el problema. Sin embargo veo que utilizas los valores por defecto de los rangos y no sabemos como están inicializados. El valor por defecto de una celda (un rango) es value, pero puede contener texto, números,...
Adicionalmente no declaras ni inicializas la variable tot. Es decir tot parece ser un variant que puede contener cualquier cosa a priori.
En la fórmula :tot = tot + Val(ListBox1. List(i, 4) te falta un paréntesis, supongo que debido a error de corta pega.
Por tanto, antes de entrar más en formatos, te aconsejo primero declara la variable tot al tipo que sea (¿float? ) e inicializala antes del buclel for. tot=0.
Prefiero usar Option Explicit al inicio del programa. Esto fuerza a la declaración de variables y previene muchos errores. Si no lo tienes y por ejemplo escribes:
Dim mivar as Integer
miivar =3
mivar= mivar+1
Puedes pensar que mivar vale 4, pero es que declaraste miivar con dos ies y es una variable distinta a mivar. Con Option Explicit te saltará el error.
Dime si esto te aclara al menos el problema y luego pasamos a fondo si es menester.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas