Saltar al contenido

Error en Userform, Error en El Evento Exit de un ListBox


Recommended Posts

publicado

Muy Buen Dia, agradesco su ayuda.

El problema es que tengo un UserForm con 40 ListBox, en los cuales con el evento Exit deben de ir Armando un "Where" que quiero usar para SQL, los primeros 20 ListBox lo hacen perfectamente, pero los Siguientes 20, no hace nada cuando se cumple el evento.

Estube revisando paso a paso y primero cierra el UserForm y al final se va al Exit del Listbox(21-40) correspondiente.

Este es el Codigo de ListBox1, que funciona bien.

Private Sub F_1__Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim F As New Collection
For i = 0 To F_1_.ListCount - 1
If F_1_.Selected(i) = True Then F.Add ("Base.A1 = '" & F_1_.List(i) & "'")
Next i
If F.Count <> 0 Then
If F.Count = 1 Then Where1 = " AND ( " & F(1) & ")"
If F.Count >= 2 Then
T = ""
For i = 2 To F.Count
T = T & " OR " & F(i)
Next i
Where1 = " AND ( " & F(1) & T & ")"
End If
If Where1 <> "" Then Where = Where & Where1
End If

If F.Count <> 0 Then
T = L_1_.Caption & ": "
T = T & Replace(Replace(F(1), "Base.A1 = '", ""), "'", "")
If F.Count >= 2 Then
For i = 2 To F.Count
T = T & ", " & Replace(Replace(F(i), "Base.A1 = '", ""), "'", "")
Next i
End If
If TextoArticulo = "" Then
TextoArticulo = "Filtros de Articulo= " & T
Else
TextoArticulo = TextoArticulo & "- " & T
End If
End If
End Sub[/CODE]

Este es el codigo del ListBox21, que ya no funciona.

[CODE]Private Sub F_21__Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim F As New Collection
For i = 0 To F_21_.ListCount - 1
If F_21_.Selected(i) = True Then F.Add ("Base.A21 = '" & F_21_.List(i) & "'")
Next i
If F.Count <> 0 Then
If F.Count = 1 Then Where1 = " AND ( " & F(1) & ")"
If F.Count >= 2 Then
T = ""
For i = 2 To F.Count
T = T & " OR " & F(i)
Next i
Where1 = " AND ( " & F(1) & T & ")"
End If
If Where1 <> "" Then Where = Where & Where1
End If
If F.Count <> 0 Then
T = L_21_.Caption & ": "
T = T & Replace(Replace(F(1), "Base.A21 = '", ""), "'", "")
If F.Count >= 2 Then
For i = 2 To F.Count
T = T & ", " & Replace(Replace(F(i), "Base.A21 = '", ""), "'", "")
Next i
End If
If TextoArticulo = "" Then
TextoArticulo = "Filtros de Articulo= " & T
Else
TextoArticulo = TextoArticulo & "- " & T
End If
End If
End Sub
[/CODE]

Saludos, espero me puedan ayudar, ya busque mucho y no encuentro el error.

publicado

Con apenas unas líneas puedes resolver tu problema sin necesidad de programar un proceso para cada listbox, ya que con uno solo es suficiente.

Abre el adjunto, selecciona los valores que quieras, y pulsa el botón "Play azul".

Para borrar la selección pulsa el botón "Cancel rojo"

40 listbox.xls

publicado

Muchas Gracias, me ayudo bastante el ejemplo, ya que tenia tiempo intentando hacer algo parecido pero no habia encontrado la forma, tengo una duda sobre un comando de sql en el mismo archivo, espero no romper las reglas. Ya que lo que cargo en cada uno de los listbox lo saco de una base en access, pero soy novato en esto, y uso el siguiente codigo para traer los datos a una hoja y posteriormente los cargo al listbox correspondiente, y luego con el mismo codigo lo borro, eh intentado traerlo desde la base con el comando sql a un array o algo en memoria, para posteriormete incluirlos en el listbox. Disculpa las molestias, soy algo novato en esto. Saludos.

Codigo para traer los datos a cargar en un listbox. Creo que cometo el mismo error que en el anterior, ya que tengo un Sub para cada carga. Espero me puedas ayudar y de verdad mil gracias.

Sub F1()
ListBox1.Clear
If Where <> "" Then Espacio = Chr(13) & "" & Chr(10)
Sheets("Proceso").Select
Range("A:B").Clear
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:="ODBC;DSN=MS Access Database;DBQ=" & Archivo & ";DefaultDir=" & Ruta & ";DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;", Destination:=Range("$A$1")).QueryTable
.CommandText = _
"SELECT DISTINCT Base.A1" & Chr(13) & "" & Chr(10) & _
"FROM `" & Archivo & "`.Base Base" & Chr(13) & "" & Chr(10) & _
Where & Esp & _ 'Aqui lo puse asi, para que sea actualizable, y se cargen solo los datos aplicables.
"ORDER BY Base.A1 ASC"
.ListObject.DisplayName = "Tabla"
.Refresh BackgroundQuery:=False
End With
ActiveSheet.ListObjects("Tabla").Unlist
If Cells(1, 3) > 1 Then 'Aqui hago una comprobacion para saber que si trajo datos.
For i = 2 To Cells(1, 3)
ListBox1.AddItem Cells(i, 1).Value 'Aqui los agrego al ListBox
Next i
End If
End Sub[/CODE]

Mi duda es si puedo cargar todos de una sola vez, y cuando cambie la seleccion en un listbox se actualicen los demas, sin tener que meterlos a una hoja y de ahi cargarlos, ya que de la forma que yo lo hago tarda mucho en actualizar todos los listbox, es por eso que yo solo los actualizaba con el evento doble clic, pero estaria perfecto poderlos cargar en el cambio de seleccion.

Saludos.

publicado

Perdon por la tardanza, desde ayer estaba intentando contestar pero sin exito.

Muy Bien. Mi archivo practicamente esta muy enredado, ya que queria asegurarme que de la informacion bien y luego depurarlo y darle algo de formato, pero te explico, Son 2 archivos, uno es la base, y esta hecha en access, y el otro es el que yo denomino reporteador, que es un excel, en el cual tengo el formulario y despues de contestar el formulario quiero traer los datos a una hoja. La base se conforma asi, con su respectivo Ejemplo:

Año: 2011

Mes: 1

ID_Mes: 201101

ID_Mes2: 01_Enero

ID_Sem: 201103

ID_Sem2: 03 de 2011

ID_Articulo: 18811575

Sku: 188115577

Ean: 7506278600377

Descripcion: Bota Michelin Hi Hydroedge

Detalle: Bota, Hi Hydroedge, Cafe Medio, 26

A1: Michelin

A2: Bota

A3: Estilo

A4: Cafe Medio

A5: Talla

A6: 67

A7: Primavera-Verano

A8: Moda

A9: Activo

A10: 43

A11:

A12:

A13:

A14:

A15:

A16:

A17:

A18:

A19:

A20:

Precio: 1999

Costo: 982

Alta: 17/05/2011

ID_Tienda: 106

A21: 106_Lindavista

A22:

A23:

A24:

A25:

A26:

A27:

A28:

A29:

A30:

A31:

A32:

A33:

A34:

A35:

A36:

A37:

A38:

A39:

A40:

InvPza: 1

InvCto: 982.27

InvVta: 1378.62

VtaPza: 1

VtaCto: 982.27

VtaNta: 1378.62

VtaBta: 1395.10

Lo que yo deseo hacer, es cargar el formulario, poder seleccionar si quiero el reporte Semanal o Mensual, despues que me pida 4 Datos a para formar mi rango de fechas, que serian AñoInicial, MesInicial(o SemInicial), AñoFinal, MesFinal(o SemFinal). Ya que tengo el Rango de Fechas poder seleccionar filtros de Articulo o Tienda, con opcion de multiseleccion. Los Campos del Articulo Son del A1 al A20, y los de Tienda del A21 al A40. Tambien quiero poder seleccionar un Rango de Precios, Costo, o Alta; en el cual pueda poner entre Tal Dato y Tal Dato Respectivamente, y por ultimo con un boton de generar, traer los datos a una hoja de excel, para poder trabajar con formulas en excel. Uno de los detalles, es que quiero que cuando aga seleccion en alguno de los filtros, los demas se actualicen y solo me muestre los aplicables.

En los archivos adjuntos esta un poco confuso, pero espero entiendas el punto de lo que intento hacer. Ya lo trabaje pero soy algo novato y hay muchas cosas que creo que ago de la manera incorrecta, espero me puedas ayudar y muchas gracias, me ha servido mucho lo anterior, si puedo pagartelo de alguna forma, no dudes en decirmelo.

Te envio un link con los archivos, ya que superan el limite permitido

http://dl.dropbox.com/u/63196918/Pruebas/Base.accdb

http://dl.dropbox.com/u/63196918/Pruebas/Reporte%20V3.xlsm

publicado

Pues si, algo confuso está.

Para empezar hablas de datos de la tienda A21 a A40, cuando en la base de datos estas columnas están como T1 a T20.

Voy a prepararte una consulta tipo a la base de satos y luego tu la adaptas a tus necesidades.

- - - - - Mensaje combinado - - - - -

Hola:

Te adjunto un ejemplo de como acceder a la base de datos y cargar las listas con los datos para seleccionar.

He utilizado ADO para conectar Excel con Access. (Es un procedimiento de lo mas habitual para conectarse con bases de datos SQL)

Lo he hecho para los datos del Artículo (Columnas A1 a A20), supongo que no tendrás problemas para añadir el resto.

Antes de abrir el archivo asegúrate que:

La base de datos Base.accdb está en el mismo directorio

Si te da error al abrir el archivo en la sentencia ADODB.Connection, que es lo mas probable, debes añadir al proyecto la referencia:

Microsoft ActiveX Data Objects 2.7 Library (Alt+F11\Herramientas\Referencias)

Saludos

Consulta con 20 listbox.xls

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Current Donation Goals

    • Raised 0.00 EUR of 130.00 EUR target
  • Archivos

  • Estadísticas de descargas

    • Archivos
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    3    1

  • Crear macros Excel

  • Mensajes

    • Saludos amigos espero estén bien  En la actualidad utilizo la siguiente macro para generar un código alfanumérico continuo que al guardar los datos se copia en la Celdas “B5” de las Hojas 58 (MATRIZ1) y Hojas59 (MATRIZ2) Private Sub CommandButton3_Click()     If Hoja58.Range("B5").Value < 9999 Then Hoja58.Range("B5").Value Hoja58.Range("B6").Value + 1     Else        Hoja58.Range("B5").Value = 1     End If If Hoja59.Range("B5").Value < 9999 Then Hoja59.Range("B5").Value = Hoja59.Range("B6").Value + 1 Else        Hoja59.Range("B5").Value = 1     End If End Sub El código se genera normalmente sin embargo no se copia inmediatamente en las Celdas “B5” sino que aparece en las Celdas “B6” mientras que las Celdas “B5” siempre permanecen en blanco, actualmente el código consta de tres letras y cuatro dígitos (RCI-0000) pero me interesa poderle concatenar el mes y año en formato mm-yy para que el código finalmente quede expresado de la siguiente forma RCI-0000-00-00 Mucho les sabre agradecer la ayuda que me puedan dar RCI PRUEBA..xlsm
    • Saludos amigos espero estén bien  En la actualidad cuando introduzco texto en los TextBox 5, 6 y 7 y dicho texto es mas largo que el ancho de los Texbox el texto se copia en una misma línea lo que dificulta verificar la redacción, así como visualizar cualquier error por lo cual necesito me ayuden con una macro que justifique el texto dentro de los Textbox, he probado usar la función Multiline sin obtener el resultado esperado. Mucho les sabre agradecer la ayuda que me puedan dar RCI PRUEBA..xlsm
    • Saludos amigos espero estén bien  En la actualidad utilizo los datos provenientes de los TextBox 5, 6 y 7 se guardan en las Columnas H, I y O de las Hojas 58 (MATRIZ1) y Hojas59 (MATRIZ2) sin embargo cuando el texto es abundante no se visualiza completamente en las celdas correspondientes de allí que necesito que cada fila se ajuste al tamaño de la celda que contenga mayor cantidad de texto para lo cual he probado con la siguiente macro: Private Sub Worksheet_SelectionChange(ByVal Target As Range) Cells.EntireRow.AutoFit End Sub Sin embargo, dicha macro coloca todas las filas del tamaño del texto que contengan y lo que en realidad necesito es que dicha macro solo se aplique desde la Fila 5 en adelante. Mucho les sabre agradecer la ayuda que me puedan dar RCI PRUEBA..xlsm
    • Saludos amigos espero estén bien  En la actualidad utilizo la siguiente macro para que la fecha aparezca en el Textbox2: Private Sub UserForm_activate() Me.TextBox2.Value = VBA.Date End Sub Sin embargo, una vez guardo los datos la fecha cambia de formato y se guarda en formato mm/dd/yyyy en vez de dd/mm/yyyy y este cambio de fecha me distorsiona los resultados de las fórmulas en las Columnas J en las Hojas 58 (MATRIZ1) y Hojas59 (MATRIZ2) Mucho les sabre agradecer la ayuda que me puedan dar RCI PRUEBA..xlsm
    • ¡Hola! Después de un buen tiempo ausente...  @Gabriela hg ya que veo que tienes Excel 365, te dejo mi solución para piezas y gramos.   Extraer piezas - gramos 365_GP.xlsx
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.