El número de columnas se controla con la propiedad ColumnCount del listbox ¿qué valor tienes ahí? deberías tener un 14
También puede ocurrir que tengas 14 columnas, pero que algunas de ellas tengan la anchura igual a cero, en este caso no se mostrarán, aunqué sí estén ahí.
Mira la propiedad ColumnWidths que es la que controla las anchuras de las columnas a ver qué tienes, no sea que haya algún cero.
pacomegias es el mas indicado para hacerte llegar dicha informacion, yo no manejo casi nada las macros, un ejemplo de como me lo hicieron es este
Private Sub Búsqueda() 'Los que encuentran entre ¿? son originales los cuales puede cambiar a su adaptacion Application.ScreenUpdating = False Sheets(Nueva).Select L.RowSource = "" Sheets(Activa).Cells.Copy Range("A1") Filas = Range("A" & Rows.Count).End(xlUp).Row '¿("A"? donde busca la linea
For x = 1 To Filas: Cells(x, Columnas + 1) = x: Next Cells(1, Columnas + 1) = "Fila" '¿(1,? es linea donde estan los titulos If Trim(Texto) <> "" Then yTexto = Texto For x = Filas To 2 Step -1 '¿2? es donde comienzan los datos If Distinguir = False Then yTexto = UCase(yTexto)
If C.ListIndex <> C.ListCount - 1 Then xTexto = Cells(x, C.ListIndex + 1) End If
If Distinguir = False Then xTexto = UCase(xTexto)
If Empiece = True Then If Not xTexto Like yTexto & "*" Then Rows(x).Delete ElseIf Termine = True Then If Not xTexto Like "*" & yTexto Then Rows(x).Delete Else If Not xTexto Like "*" & yTexto & "*" Then Rows(x).Delete End If Next End If
Filas = Range("A" & Rows.Count).End(xlUp).Row '¿("A"? donde busca la linea If Filas > 1 Then L.RowSource = Range(Cells(2, 1), Cells(Filas, Columnas + 1)).Address '¿1 Then? donde estan los titulos. ¿Range(Cells(2, 1)? donde enpiezan datos Application.ScreenUpdating = True
End Sub
Este es ejemplo que está en un libro que tengo, hay otros ejemplos. Claro que el mando Búsqueda tiene que estar en UserForm_Initialize así como otras propiedades para el ListBox
Estimado JoaoM, la verdad yo tambien no se casi nada de cúdigos , es por eso que siempre acudo al foro para que con la valiosa ayuda de los capos pueda hacer más efectivo mi trabajo.
efectivamente, como dice JoaoM, cuando insertas los datos en el listbox uno a uno, hay una limitación en las 10 columnas, así que hay que solventar esta limitación utilizando un rango que haga de origen de la lista, para no tener esta limitación.
así que ...
*Opción 1: copiar los datos que necesitas a un rango auxiliar, por ejemplo mediante un filtro avanzado y utilizar ese rango como origen de tu lisbox.
*Opción 2: utiliza una matriz para almacenar los datos y luego igualas la propiedad .List de listbox a esa matriz
el problema estaría en que hay que saber cuántas filas vamos a tener en esa matriz para poder declararla, un redim preserve no sirve porque solo permite cambiar el número de columnas, pero no el de filas.
bueno, sería cuestión de comprobar primero cuántos datos cumplen y luego declarar la matriz e ir asignando los valores
Private Sub BtnBuscarCart_Click()
Dim X, i As Integer
Dim mt_boliv() As Integer
Dim mt_dolar() As Integer
Dim matrizauxiliar(0 To ¿CUÁNTAS FILAS HAY?, 0 To 13)
Hice las modifiaciones sugeridas pero me sale un mesaje de error, por favor te paso el archivo para que lo analizes de mejor manera, yo soy novatisimo :(
1-Has definido la matriz auxiliar con una sola dimension, pero debes definirla con 2 dimensiones, filas y columnas
como sólo se puede redimensionar la última dimensión, las columnas, lo que podemos hacer es ir construyendo una matriz transpuesta de la que necesitamos y luego le daremos la vuelta.
2- el bucle que realizas con esos gotos y etiquetas es un poco "raro", además termina con un goto que envía a totales, así que nunca pasa por la asignación listbox1.lista = matrizauxiliar
3- Tu listbox1 tiene la propiedad ColumnCount en 10, pero querías 14 columnas ¿no?
Sin retocar mucho tu código, te propongo este otro.
Hice las correcciones indicadas pero al momento de ejecutar me sale el mensaje siguiente "Error de compilación: End If sin bloque If " y lo pinta de azul el End If que esta al centro de
ListBox1.List = aplication.WorksheetFunction.traspose(matrizauxiliar) ' trasnponemos para cambiar filas por columnas GoTo totales End If 'ListBox1.AddItem ReDim Preserve matrizauxiliar(0 To 13, 0 To X)
Evidentemente no hice ese cambio, ahora lo modifique pero te cuento que no visualiza nada en el listbox, no sera por que no indicamos el número de columnas? o tengo que modificar las propiedades del listbox?
Ingrese a mano pero tampoco lo visualiza, solo sale el total en los textbox y nada más :( , ayuda por favor no se que puedo esta haciendo mal :(, sera que puedes probar tú en tú maquina para ver mis errores ? desde ya muy agradecido por tu tiempo y paciencia.
Ahora siiiiiiiiiiii gracias gracias , lo qeu hice copiar todo tu codigo y reeemplazarlo a lo que estaba haciendo y funciono a la perfecion TEMA SOLUCIONADO por fin jejejejeejejee un gran abrazo y gracias gracias gracias por tú tiempo, paciencia y buena onda
Creo que lo que tienes ahora es un ListBox SIN ENCABEZADO, es decir; lo que esta haciendo de encabezado del ListBox es un Label y no su propio Columnheads en que los titulos corren junto a labarra desplasadora.
Para ello tiene que e lListBox cargarse con Rounsource.
Yo no se hacerlo, pero eso es lo que me han dicho y leido, el label no corre con los titulos
Hola Pacomegia. A mi se me presenta el problema de hacer la Búsqueda entre una Fecha Inicial y una Fecha Final. Este mismo ejemplo me serviría pero añadiendo un Combobox más, para la fecha final. En total tendría dos combobox. Como habría que retocar el código que le pusiste al compañero?
El número de columnas se controla con la propiedad ColumnCount del listbox ¿qué valor tienes ahí? deberías tener un 14
También puede ocurrir que tengas 14 columnas, pero que algunas de ellas tengan la anchura igual a cero, en este caso no se mostrarán, aunqué sí estén ahí.
Mira la propiedad ColumnWidths que es la que controla las anchuras de las columnas a ver qué tienes, no sea que haya algún cero.
------
Ya sé Excel, pero necesito más.
Tenia entendido que para mostarr mas de 10 columnas en ListBox, este tiene que cargarse con Rousource y no otro metodo
Estimado Pacomegia:
Está en 14 la propiedad columncount pero solo me muestra 10 columnas, mi hoja de excel no hay ningun vacio todos tienen datos.
Este es mi código:
Private Sub BtnBuscarCart_Click()
Dim X, i As Integer
Dim mt_boliv() As Integer
Dim mt_dolar() As Integer
On Error Resume Next
If ComboBox2 <> "" Then
ListBox1.Clear
With Sheets("BOLETOS")
i = 2
X = 0
nxt: rw = .Range(.Cells(i, 6), .Cells(1000000, 6)).Find(CDate(ComboBox2), lookat:=xlWhole).Row
If rw = i Then GoTo totales
ListBox1.AddItem
ListBox1.List(X, 0) = .Cells(rw, 3) 'forma de pago C
ListBox1.List(X, 1) = .Cells(rw, 4) 'codigo cliente D
ListBox1.List(X, 2) = .Cells(rw, 5) 'cliente E
ListBox1.List(X, 3) = .Cells(rw, 7) 'linea aerea G
ListBox1.List(X, 4) = .Cells(rw, 8) 'codigo H
ListBox1.List(X, 5) = .Cells(rw, 9) 'boleto nº I
ListBox1.List(X, 6) = .Cells(rw, 10) 'ruta1 J
ListBox1.List(X, 7) = .Cells(rw, 11) 'ruta2 K
ListBox1.List(X, 8) = .Cells(rw, 12) 'ruta3 L
ListBox1.List(X, 9) = .Cells(rw, 13) 'ruta4 M
ListBox1.List(X, 10) = .Cells(rw, 14) 'ruta5 N
ListBox1.List(X, 11) = .Cells(rw, 15) 'nombre del pasajer@ O
ListBox1.List(X, 12) = Format(.Cells(rw, 16), "#,##0.00") 'bolivianos P
ListBox1.List(X, 13) = Format(.Cells(rw, 17), "#,##0.00") 'dolares Q
ReDim Preserve mt_boliv(X + 1)
mt_boliv(X + 1) = .Cells(rw, 16) * 1
ReDim Preserve mt_dolar(X + 1)
mt_dolar(X + 1) = .Cells(rw, 17) * 1
X = X + 1
i = rw
GoTo nxt
End With
Else
ListBox1.Clear
End If
totales:
TextBox1 = Format(Application.Sum(mt_boliv()), "#,##0.00")
TextBox2 = Format(Application.Sum(mt_dolar()), "#,##0.00")
End Sub
Gracias
Saludos
Jesús
Jesus Martinez Plantarosa
JoaoM gracias por responder, y como utilizo ese rousource? unn ejemplo por favor. gracias
Saludos
Jesús
Jesus Martinez Plantarosa
pacomegias es el mas indicado para hacerte llegar dicha informacion, yo no manejo casi nada las macros, un ejemplo de como me lo hicieron es este
Private Sub Búsqueda()
'Los que encuentran entre ¿? son originales los cuales puede cambiar a su adaptacion
Application.ScreenUpdating = False
Sheets(Nueva).Select
L.RowSource = ""
Sheets(Activa).Cells.Copy Range("A1")
Filas = Range("A" & Rows.Count).End(xlUp).Row '¿("A"? donde busca la linea
For x = 1 To Filas: Cells(x, Columnas + 1) = x: Next
Cells(1, Columnas + 1) = "Fila" '¿(1,? es linea donde estan los titulos
If Trim(Texto) <> "" Then
yTexto = Texto
For x = Filas To 2 Step -1 '¿2? es donde comienzan los datos
If Distinguir = False Then yTexto = UCase(yTexto)
If C.ListIndex <> C.ListCount - 1 Then
xTexto = Cells(x, C.ListIndex + 1)
End If
If Distinguir = False Then xTexto = UCase(xTexto)
If Empiece = True Then
If Not xTexto Like yTexto & "*" Then Rows(x).Delete
ElseIf Termine = True Then
If Not xTexto Like "*" & yTexto Then Rows(x).Delete
Else
If Not xTexto Like "*" & yTexto & "*" Then Rows(x).Delete
End If
Next
End If
Filas = Range("A" & Rows.Count).End(xlUp).Row '¿("A"? donde busca la linea
If Filas > 1 Then L.RowSource = Range(Cells(2, 1), Cells(Filas, Columnas + 1)).Address '¿1 Then? donde estan los titulos. ¿Range(Cells(2, 1)? donde enpiezan datos
Application.ScreenUpdating = True
End Sub
Este es ejemplo que está en un libro que tengo, hay otros ejemplos. Claro que el mando Búsqueda tiene que estar en UserForm_Initialize así como otras propiedades para el ListBox
Estimado JoaoM, la verdad yo tambien no se casi nada de cúdigos , es por eso que siempre acudo al foro para que con la valiosa ayuda de los capos pueda hacer más efectivo mi trabajo.
Gracias de todas maneras
Saludos
Jesús
Jesus Martinez Plantarosa
Hola a ambos.
efectivamente, como dice JoaoM, cuando insertas los datos en el listbox uno a uno, hay una limitación en las 10 columnas, así que hay que solventar esta limitación utilizando un rango que haga de origen de la lista, para no tener esta limitación.
así que ...
*Opción 1: copiar los datos que necesitas a un rango auxiliar, por ejemplo mediante un filtro avanzado y utilizar ese rango como origen de tu lisbox.
ListBox1.RowSource = "elnombredelrangoresultadodelfiltro"
*Opción 2: utiliza una matriz para almacenar los datos y luego igualas la propiedad .List de listbox a esa matriz
el problema estaría en que hay que saber cuántas filas vamos a tener en esa matriz para poder declararla, un redim preserve no sirve porque solo permite cambiar el número de columnas, pero no el de filas.
bueno, sería cuestión de comprobar primero cuántos datos cumplen y luego declarar la matriz e ir asignando los valores
Private Sub BtnBuscarCart_Click()
Dim X, i As Integer
Dim mt_boliv() As Integer
Dim mt_dolar() As Integer
Dim matrizauxiliar(0 To ¿CUÁNTAS FILAS HAY?, 0 To 13)
On Error Resume Next
If ComboBox2 <> "" Then
ListBox1.Clear
With Sheets("BOLETOS")
i = 2
X = 0
nxt: rw = .Range(.Cells(i, 6), .Cells(1000000, 6)).Find(CDate(ComboBox2), lookat:=xlWhole).Row
If rw = i Then GoTo totales
matrizauxiliar(X, 0) = .Cells(rw, 3) 'forma de pago C
matrizauxiliar(X, 1) = .Cells(rw, 4) 'codigo cliente D
matrizauxiliar(X, 2) = .Cells(rw, 5) 'cliente E
matrizauxiliar(X, 3) = .Cells(rw, 7) 'linea aerea G
matrizauxiliar(X, 4) = .Cells(rw, 8) 'codigo H
matrizauxiliar(X, 5) = .Cells(rw, 9) 'boleto nº I
matrizauxiliar(X, 6) = .Cells(rw, 10) 'ruta1 J
matrizauxiliar(X, 7) = .Cells(rw, 11) 'ruta2 K
matrizauxiliar(X, 8) = .Cells(rw, 12) 'ruta3 L
matrizauxiliar(X, 9) = .Cells(rw, 13) 'ruta4 M
matrizauxiliar(X, 10) = .Cells(rw, 14) 'ruta5 N
matrizauxiliar(X, 11) = .Cells(rw, 15) 'nombre del pasajer@ O
matrizauxiliar(X, 12) = Format(.Cells(rw, 16), "#,##0.00") 'bolivianos P
matrizauxiliar(X, 13) = Format(.Cells(rw, 17), "#,##0.00") 'dolares Q
ReDim Preserve mt_boliv(X + 1)
mt_boliv(X + 1) = .Cells(rw, 16) * 1
ReDim Preserve mt_dolar(X + 1)
mt_dolar(X + 1) = .Cells(rw, 17) * 1
X = X + 1
i = rw
GoTo nxt
End With
ListBox1.List = matrizauxiliar
Else
ListBox1.Clear
End If
totales:
TextBox1 = Format(Application.Sum(mt_boliv()), "#,##0.00")
TextBox2 = Format(Application.Sum(mt_dolar()), "#,##0.00")
End Sub
------
Ya sé Excel, pero necesito más.
Estimado pacomegia:
Hice las modifiaciones sugeridas pero me sale un mesaje de error, por favor te paso el archivo para que lo analizes de mejor manera, yo soy novatisimo :(
Gracias por tú tiempo y paciencia
Un abrazo
Jesús
Jesus Martinez Plantarosa
1-Has definido la matriz auxiliar con una sola dimension, pero debes definirla con 2 dimensiones, filas y columnas
como sólo se puede redimensionar la última dimensión, las columnas, lo que podemos hacer es ir construyendo una matriz transpuesta de la que necesitamos y luego le daremos la vuelta.
2- el bucle que realizas con esos gotos y etiquetas es un poco "raro", además termina con un goto que envía a totales, así que nunca pasa por la asignación listbox1.lista = matrizauxiliar
3- Tu listbox1 tiene la propiedad ColumnCount en 10, pero querías 14 columnas ¿no?
Sin retocar mucho tu código, te propongo este otro.
Private Sub BtnBuscarCart_Click()
Dim X, i As Integer
Dim mt_boliv() As Integer
Dim mt_dolar() As Integer
Dim matrizauxiliar() 'sin dimensiones de momento
On Error Resume Next
If ComboBox2 <> "" Then
ListBox1.Clear
With Sheets("BOLETOS")
i = 2
X = 0
Do
nxt: rw = .Range(.Cells(i, 6), .Cells(1000000, 6)).Find(CDate(ComboBox2), lookat:=xlWhole).Row
If rw = i Then
' antes de salir del bucle asignamos el origen al listbox
ListBox1.List = Application.WorksheetFunction.Transpose(matrizauxiliar) ' transponemos para cambiar filas por columnas
GoTo totales
End If
'ListBox1.AddItem
ReDim Preserve matrizauxiliar(0 To 13, 0 To X) 'redimensionamos columnas más, sólo se puede cambiar la dimensión con Preserve del último argumento
matrizauxiliar(0, X) = .Cells(rw, 3) 'forma de pago C
matrizauxiliar(1, X) = .Cells(rw, 4) 'codigo cliente D
matrizauxiliar(2, X) = .Cells(rw, 5) 'cliente E
matrizauxiliar(3, X) = .Cells(rw, 7) 'linea aerea G
matrizauxiliar(4, X) = .Cells(rw, 8) 'codigo H
matrizauxiliar(5, X) = .Cells(rw, 9) 'boleto nº I
matrizauxiliar(6, X) = .Cells(rw, 10) 'ruta1 J
matrizauxiliar(7, X) = .Cells(rw, 11) 'ruta2 K
matrizauxiliar(8, X) = .Cells(rw, 12) 'ruta3 L
matrizauxiliar(9, X) = .Cells(rw, 13) 'ruta4 M
matrizauxiliar(10, X) = .Cells(rw, 14) 'ruta5 N
matrizauxiliar(11, X) = .Cells(rw, 15) 'nombre del pasajer@ O
matrizauxiliar(12, X) = Format(.Cells(rw, 16), "#,##0.00") 'bolivianos P
matrizauxiliar(13, X) = Format(.Cells(rw, 17), "#,##0.00") 'dolares Q
ReDim Preserve mt_boliv(X + 1)
mt_boliv(X + 1) = .Cells(rw, 16) * 1
ReDim Preserve mt_dolar(X + 1)
mt_dolar(X + 1) = .Cells(rw, 17) * 1
X = X + 1
i = rw
GoTo nxt
Loop
End With
Else
ListBox1.Clear
End If
totales:
TextBox1 = Format(Application.Sum(mt_boliv()), "#,##0.00")
TextBox2 = Format(Application.Sum(mt_dolar()), "#,##0.00")
End Sub
------
Ya sé Excel, pero necesito más.
Estimado Pacomegia:
Hice las correcciones indicadas pero al momento de ejecutar me sale el mensaje siguiente "Error de compilación: End If sin bloque If " y lo pinta de azul el End If que esta al centro de
ListBox1.List = aplication.WorksheetFunction.traspose(matrizauxiliar) ' trasnponemos para cambiar filas por columnas
GoTo totales
End If
'ListBox1.AddItem
ReDim Preserve matrizauxiliar(0 To 13, 0 To X)
Ayuda por favor y gracias mil
un Abrazo
Jesús
Jesus Martinez Plantarosa
Desactiva dicho End IF ('End If) y prueba si todo va normal
hola JoaoM, no funciona si lo desactivo el End If :(
saludos
Jesús
Jesus Martinez Plantarosa
Ese error se da porque tienes un bucle no cerrado.
Puede ser un bloque IF, un bloque FOR, o cualquier otro bloque que necesita de un inicio y un final.
Revisa que has puesto correctamente las órdenes END IF, LOOP y END WITH del código.
Un saludo
Estimado Cron:
Copie el codigo que muy gentilmente me esta ayudando Pacomegia, y como veras todo esta correcto o estoy viendo algo mal?
ayuda por favor
saludos
Jesús
Jesus Martinez Plantarosa
He probado a copiar estrictamente el código que puso Paco y no me da ningún error de compilación.
Trata de revisar qué no has escrito igual para localizar el error, incidiendo en lo que te comenté en la respuesta anterior.
Un saludo
Hola (veo que este tema está siendo muy activo)
fijáos que modifiqué la línea del IF
antes era una sóla línea
If rw = i Then GoTo totales 'versión antigua
pero luego lo descompuse en varias porque quería además de ese goto, asignar la propiedad.
If rw = i Then
' antes de salir del bucle asignamos el origen al listbox
ListBox1.List = Application.WorksheetFunction.Transpose(matrizauxiliar) ' transponemos para cambiar filas por columnas
GoTo totales
End If
Jesús ¿hiciste ese cambio en la línea de IF?
------
Ya sé Excel, pero necesito más.
Estimado Pacomegia:
Evidentemente no hice ese cambio, ahora lo modifique pero te cuento que no visualiza nada en el listbox, no sera por que no indicamos el número de columnas? o tengo que modificar las propiedades del listbox?
Un abrazo
Jesús
Jesus Martinez Plantarosa
sí, tienes que poner el número de columnas que quieras visualizar en la propiedad ColumnCount del listbox
lo puedes poner a mano, o mediante código, pero hay que definir esa propiedad.
------
Ya sé Excel, pero necesito más.
Estimado Pacomegia:
Ingrese a mano pero tampoco lo visualiza, solo sale el total en los textbox y nada más :( , ayuda por favor no se que puedo esta haciendo mal :(, sera que puedes probar tú en tú maquina para ver mis errores ? desde ya muy agradecido por tu tiempo y paciencia.
Un abrazo
Jesús
Jesus Martinez Plantarosa
En mi versión de los hechos funciona
la adjunto.
(yo no tengo tu última versión)
------
Ya sé Excel, pero necesito más.
Ahora siiiiiiiiiiii gracias gracias , lo qeu hice copiar todo tu codigo y reeemplazarlo a lo que estaba haciendo y funciono a la perfecion TEMA SOLUCIONADO por fin jejejejeejejee un gran abrazo y gracias gracias gracias por tú tiempo, paciencia y buena onda
Un abrazo
Jesús
Jesus Martinez Plantarosa
Creo que lo que tienes ahora es un ListBox SIN ENCABEZADO, es decir; lo que esta haciendo de encabezado del ListBox es un Label y no su propio Columnheads en que los titulos corren junto a labarra desplasadora.
Para ello tiene que e lListBox cargarse con Rounsource.
Yo no se hacerlo, pero eso es lo que me han dicho y leido, el label no corre con los titulos
Gracias por el interes JoaoM
Saludos
Jesús
Jesus Martinez Plantarosa
Hola Pacomegia. A mi se me presenta el problema de hacer la Búsqueda entre una Fecha Inicial y una Fecha Final. Este mismo ejemplo me serviría pero añadiendo un Combobox más, para la fecha final. En total tendría dos combobox. Como habría que retocar el código que le pusiste al compañero?
Un saludo.
Para plantear una nueva pregunta, crea un tema nuevo en el foro
------
Ya sé Excel, pero necesito más.
Actuelmente no puedo agregar mas de 10 columnas a un listbox
Private Sub LlenaLista()
Worksheets("INVENTARIO").Select
LstMatAvalible.Clear
Dim Rango, Celda As Range
Dim i As Integer
Set Rango = Worksheets("INVENTARIO").Range("G2:G4000").SpecialCells(xlCellTypeVisible)
i = 0
For Each Celda In Rango
If Celda <> "" Then
' colu = 1
'ren = Celda.Row
LstMatAvalible.AddItem Celda.Value
LstMatAvalible.List(i, 1) = Celda(1, -2).Value
LstMatAvalible.List(i, 2) = Celda(1, -1).Value
LstMatAvalible.List(i, 3) = Celda(1, 0).Value
LstMatAvalible.List(i, 4) = Celda(1, 6).Value
LstMatAvalible.List(i, 5) = Celda(1, 7).Value
LstMatAvalible.List(i, 6) = Celda(1, 15).Value
LstMatAvalible.List(i, 7) = Celda(1, 16).Value
LstMatAvalible.List(i, 8) = Celda(1, 18).Value
LstMatAvalible.List(i, 9) = Celda(1, 20).Value
'LstMatAvalible.List(i, 10) = Celda(1, 27).Value
i = i + 1
End If
Next Celda
End Sub