Error en listbox1

tengo un pequeño error en un listbox que depende de dos combobox

el error es que no me muestra en el listbox si solo encuentra una coicidencia y si existe mas de 2 tampoco no se que puede ser envío código que estoy utilizando, lo otro como agrego otro campo al listbox ya que me aparecen dos y necesito que me aparezcan 3.

Private Sub CommandButton1_Click()
ListBox2.Clear
Dim fecha1 As Date
Dim fecha2 As Date
Do While ComboBox2.Value = "" Or ComboBox3.Value = ""
MsgBox "es obligagorio rellenar los dos combos de fechas"
Exit Sub
Loop
fecha1 = ComboBox2.Value
fecha2 = ComboBox3.Value
Sheets("INFORMES").Activate
Range("e2").Select
Do While ActiveCell.Value <> ""
If ActiveCell.Value = fecha1 Then
Exit Do
Else
ActiveCell.Offset(1, 0).Activate
End If
Loop
Do While ActiveCell.Value <> fecha2
ListBox2.AddItem ActiveCell.Offset(0, -4).Value
c = ListBox2.ListCount - 1
ListBox2.List(c, 1) = ActiveCell.Offset(0, -1).Value
ActiveCell.Offset(1, 0).Activate
Loop
suma2 = suma2 + ActiveCell.Offset(0, -1).Value
For p = 0 To ListBox2.ListCount - 1
suma2 = suma2 + CDbl(ListBox2.List(p, 1))
Next
TextBox2.Value = suma2
TextBox2.Value = Format(TextBox2, "#,##0.00")
End Sub
Private Sub ListBox2_Click()
End Sub
Private Sub UserForm_Initialize()
Sheets("INFORMES").Activate
Range("e1").CurrentRegion.Sort key1:=Range("e1"), order1:=xlAscending, Header:=xlYes, ordercustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("e2").Activate
Do While ActiveCell.Value <> ""
If InStr(valores, ActiveCell) = 0 Then
valores = valores & "," & ActiveCell
End If
ActiveCell.Offset(1, 0).Activate
Loop
valores = Mid(valores, 2, Len(valores) - 1)
valores = Split(valores, ",")
For X = 0 To UBound(valores)
ComboBox2.AddItem valores(X)
ComboBox3.AddItem valores(X)
Next
End Sub
Private Sub CommandButton2_Click()
UserForm37.Hide
End Sub

Respuesta
1

Disculpa el retraso en la respuesta.

Antes de ir al detalle en tu código pon como primera línea

Option Explicit

Esto obliga a declarar las variables que usas y ayuda en la depuración y construcción de programas. En tu caso la instrucción Split con la misma variable a ambos lados, en un lado siendo una cadena y en el otro un array... es algo más que extraño.

Cuando tengas eso resuelto vamos paso a paso a buscar el error que dices.

he cambiado las variables pero en la función UBound que esta al final no se que hacer

aquí están las modificaciones

Option Explicit
Private Sub CommandButton1_Click()
ListBox2.Clear
Dim fecha1 As Date
Dim fecha2 As Date
Dim suma2 As String
Dim c As String
Do While ComboBox2.Value = "" Or ComboBox3.Value = ""
MsgBox "es obligagorio rellenar los dos combos de fechas"
Exit Sub
Loop
fecha1 = ComboBox2.Value
fecha2 = ComboBox3.Value
Sheets("INFORMES").Activate
Range("k2").Activate
Do While ActiveCell.Value <> ""
If ActiveCell.Value = fecha1 Then
Exit Do
Else
ActiveCell.Offset(1, 0).Activate
End If
Loop
Do While ActiveCell.Value <> fecha2
ListBox2.AddItem ActiveCell.Offset(0, -4).Value
c = ListBox2.ListCount - 1
ListBox2.List(c, 1) = ActiveCell.Offset(0, -1).Value
ActiveCell.Offset(1, 0).Activate
Loop
suma2 = suma2 + ActiveCell.Offset(0, -1).Value
For p = 0 To ListBox2.ListCount - 1
suma2 = suma2 + CDbl(ListBox2.List(p, 1))
Next
TextBox2.Value = suma2
TextBox2.Value = Format(TextBox2, "#,##0.00")
End Sub
Private Sub ListBox2_Click()
End Sub
Private Sub CommandButton2_Click()
UserForm38.Hide
End Sub
Private Sub UserForm_Initialize()
Dim valores As Integer
Dim x As String
Sheets("INFORMES").Activate
Range("k1").CurrentRegion.Sort key1:=Range("k1"), order1:=xlAscending, Header:=xlYes, ordercustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("k2").Activate
Do While ActiveCell.Value <> ""
If InStr(valores, ActiveCell) = 0 Then
valores = valores & "," & ActiveCell
End If
ActiveCell.Offset(1, 0).Activate
Loop
valores = Mid(valores, 2, Len(valores) - 1)
valores = Split(valores, ",")
For x = 0 To UBound(valores)
ComboBox2.AddItem valores(x)
ComboBox3.AddItem valores(x)
Next
End Sub

pero no me funciona da error en la función UBound

El error no está en la función Ubound, sino antes. Defines la variable "valores" como integer y sigues usándola en Mid y Split que son funciones de tratamiento de cadenas. UBound te dá los límites de un array, aparentemente un array de cadenas (es decir te dice cuantas cadenas hay), pero al ser un número entero, ¿qué esperas obtener? Es una cuestión de asignación correcta de tipos de variables. VBA intenta hacer las asignaciones aún cuando los tipos sean diferentes, pero aún si lo consigue y no da error, el resultado puede ser un sinsentido.

Creo que lo correcto es usar un entero para el indice (la x) una cadena para la función mid y un array de cadenas para split. Puesto que a priori no sabes cuantas cadenas vas a tener puedes definir la variable que va a recibir el array como variant. Otra opción es redimensionar el array a medida que sea necesario. Variant, es válido a priori para cualquier cosa pero depende de ti como lo uses.

Un ejemplo e uso de Split, de los muchos que puedes encontrar:

Sub SplitCadena() 
 Dim acad As Variant 'array de cadenas donde recibir los trozos
 Dim x As Integer 'indice
Dim s As String 'cadena a dividir
s="afakdff, akdf , adkfañjd ,df akdfajfd, dkfañdj" 'texto aleatorio
 acad = Split(s, ",") 
 For x = LBound(acad) To UBound(acad) 
  MsgBox "Item " & x & ":  " & acad(x) 
 Next 
End Sub 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas