Saltar al contenido

Formulario filtrar datos en listbox me cambia valores al ejecutar los filtros


Recommended Posts

publicado

Buenas tardes a los foreros y en especial a los maestros que tanto nos reportan con sus conocimientos a los iniciados, el problema que se me representa con el formulario es que al cargar los datos estos los importa correctamente es a la hora de usar el filtro tanto el Control como la Fecha, la fila de Objetivo% (es numérico) no me respeta los dos decimales sino que este los amplía hasta llegar a 8 decimales he buscado por el foro y no visto nada al respecto, os agradecería cómo solucionar dicho inconveniente Gracias por adelantado .......no puedo adjuntar el archivo me dice que es demasiado grande, adjunto macro por si sirve de algo.

Private Sub CommandButton3_Click()
Dim Columnas As Integer

Columnas = Range("Tabla6").Columns.Count

Private Sub btnSalir_Click()
End
End Sub

Private Sub CommandButton3_Click()


Dim Columnas As Integer

Columnas = Range("Tabla6").Columns.Count

With Me.ListBox1

    .ColumnCount = Columnas
    .ColumnWidths = "55pt;160pt;55pt;55pt;55pt;65pt;65pt;65pt;60pt;50pt;0pt;0pt"
    .ColumnHeads = True
    .RowSource = "Tabla6"

End With

End Sub


Private Sub CommandButton4_Click()
Dim fila As Long, i As Long
fila = Hoja9.Range("B" & Rows.Count).End(xlUp).Row + 1

For i = 0 To ListBox1.ListCount - 1
    
  Hoja9.Cells(fila, 2) = ListBox1.List(i, 0)
  Hoja9.Cells(fila, 3) = ListBox1.List(i, 1)
  Hoja9.Cells(fila, 5) = ListBox1.List(i, 2)
  Hoja9.Cells(fila, 6) = ListBox1.List(i, 3)
  Hoja9.Cells(fila, 7) = ListBox1.List(i, 4)
  Hoja9.Cells(fila, ? = ListBox1.List(i, 5)
  Hoja9.Cells(fila, 9) = ListBox1.List(i, 6)
  Hoja9.Cells(fila, 10) = ListBox1.List(i, 7)
  Hoja9.Cells(fila, 14) = ListBox1.List(i, ?
  
  
  fila = fila + 1
 
Next i
   
End Sub


Private Sub CommandButton5_Click()
Dim fila As Long, i As Long

fila = Hoja10.Range("b" & Rows.Count).End(xlUp).Row
ListBox1.Clear
For i = 2 To fila

    If CDate(Hoja10.Cells(i, 14)) >= CDate(f_inicial) And CDate(Hofa10.Cells(i, 14)) <= CDate(f_final) Then
    
     Me.ListBox1
     .AddItem
  .List(.ListCount - 1, 0) = Hoja10.Cells(i, 2)
  .List(.ListCount - 1, 2) = Hoja10.Cells(i, 0)
  .List(.ListCount - 1, 3) = Hoja10.Cells(i, 1)
  '.List(.ListCount - 1, 4) = Hoja10.Cells(i, 2)
  .List(.ListCount - 1, 5) = Hoja10.Cells(i, 2)
  .List(.ListCount - 1, 6) = Hoja10.Cells(i, 3)
  .List(.ListCount - 1, 7) = Hoja10.Cells(i, 4)
  .List(.ListCount - 1, ? = Hoja10.Cells(i, 5)
  .List(.ListCount - 1, 9) = Hoja10.Cells(i, 6)
  .List(.ListCount - 1, 10) = Hoja10.Cells(i, 7)
  .List(.ListCount - 1, 14) = Hoja10.Cells(i, ?
        
       End With
    
    End If
    
  Next i

End Sub


Private Sub ListBox1_Click()

End Sub


Private Sub TextBox1_Change()
'Declaramos variables
Dim fin As Long, i As Long, n As Long
Dim sCadena_seccion As String
'Filtramos por sección
With Sheets("BD_CONTROL")
fin = Application.CountA(.Range("B:B"))
If TextBox1 = "" Then
    Me.ListBox1.RowSource = ("B3:K") & Worksheets("BD_CONTROL").Range("B" & Rows.Count).End(xlUp).Row
    Exit Sub
End If
Me.TextBox2 = Clear
'Me.TextBox3 = Clear
Me.ListBox1.RowSource = Clear
For i = 2 To fin
    sCadena_matricula = .Cells(i, 2).Value
    If UCase(sCadena_matricula) Like "*" & UCase(TextBox1.Value) & "*" Then
        Me.ListBox1.AddItem
    
        Me.ListBox1.List(n, 0) = .Cells(i, 2).Value
        Me.ListBox1.List(n, 1) = .Cells(i, 3).Value
        Me.ListBox1.List(n, 2) = .Cells(i, 4).Value
        Me.ListBox1.List(n, 3) = .Cells(i, 5).Value
        Me.ListBox1.List(n, 4) = .Cells(i, 6).Value
        Me.ListBox1.List(n, 5) = .Cells(i, 7).Value
        Me.ListBox1.List(n, 6) = .Cells(i, 8).Value
        Me.ListBox1.List(n, 7) = .Cells(i, 9).Value
        Me.ListBox1.List(n, 8 = .Cells(i, 10).Value  'objetivos% 
        Me.ListBox1.List(n, 9) = .Cells(i, 11).Value
        n = n + 1
       End If
Next
Me.ListBox1.ColumnWidths = "55pt;170pt;55pt;55pt;55pt;65pt;65pt;65pt;60pt;50pt"
End With

End Sub


Private Sub TextBox2_Change()
Dim fin As Long, i As Long, n As Long
Dim sCadena_seccion As String, sCadena_fecha As String
'Una vez filtrados los datos por matricula, filtramos por fecha
With Sheets("BD_CONTROL")
fin = Application.CountA(.Range("B:B"))
If TextBox2 = "" Then
    Me.ListBox1.RowSource = ("B3:K") & Worksheets("BD_CONTROL").Range("B" & Rows.Count).End(xlUp).Row
    Exit Sub
End If

Me.ListBox1 = Clear
Me.ListBox1.RowSource = Clear
For i = 2 To fin
    sCadena_matricula = .Cells(i, 2).Value
    sCadena_fecha = .Cells(i, 11).Value
    If UCase(sCadena_matricula) Like "*" & UCase(TextBox1.Value) & "*" And _
    UCase(sCadena_fecha) Like "*" & UCase(TextBox2.Value) & "*" Then
     Me.ListBox1.AddItem
    
        Me.ListBox1.List(n, 0) = .Cells(i, 2).Value
        Me.ListBox1.List(n, 1) = .Cells(i, 3).Value
        Me.ListBox1.List(n, 2) = .Cells(i, 4).Value
        Me.ListBox1.List(n, 3) = .Cells(i, 5).Value
        Me.ListBox1.List(n, 4) = .Cells(i, 6).Value
        Me.ListBox1.List(n, 5) = .Cells(i, 7).Value
        Me.ListBox1.List(n, 6) = .Cells(i, 8).Value
        Me.ListBox1.List(n, 7) = .Cells(i, 9).Value
        Me.ListBox1.List(n, 8 = .Cells(i, 10).Value  'objetivos%  
        Me.ListBox1.List(n, 9) = .Cells(i, 11).Value
        n = n + 1
       End If
Next
Me.ListBox1.ColumnWidths = "55pt;170pt;55pt;55pt;55pt;65pt;65pt;65pt;60pt;50pt"
End With
End Sub

publicado
Hace 20 horas, Haplox dijo:

@jalomiva , así no podemos hacer nada. Sube tu archivo de ejemplo para poder ver cómo arreglarlo

¿Qué parte no has entendido de lo que te ha comentado José?

¿No te das cuentan que es imposible probar nada sin el archivo y que con las imágenes no hacemos nada?

publicado

Buenas tardes, hola Antoni no he tenido ningún problema al subir archivo hasta ahora, el libro lo he reducido a una hoja y aun así me sale el siguiente mensaje, pido disculpas porque al no poder adjuntar el archivo es eso de que una imagen vale más que mil palabras.

Sin título2.png

publicado

Buenas noches, lo he solucionado insertando el siguiente código (TextBox13.Text = Format(TextBox13.Text, "##.00") en el textbox del formulario donde relleno la base de datos.

 

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

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      187
    • Comentarios
      97
    • Revisiones
      28

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    1    1

  • Crear macros Excel

  • Mensajes

    • Perdona @Abraham Valencia pero he estado liado estos días. En realidad todo el problema se reduce a estos dos problemas: Problema 1: El script que "fabrica" SAP y que luego "pego" en la macro, no es capaz de  guardar archivos en SharePoint. He estado buscando, y en realidad muchas personas tienen ese problema (no poder guardar un Excel en SAP a través de VBA). Eso muy probablemente sean problemas de permisos, que no puedo cambiar (no soy administrador de nada). Como no puedo solucionarlo así, paso al plan B, que es guardar en Excel que me genera SAP en el ordenador de cada usuario que ejecute la plantilla (y que sí está guardada en SharePoint), para después con PowerQuery llamar a ese Excel (el export). Para ello, pretendo guardar el export, en la ruta relativa "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" donde los \..\..\..\ saltan las rutas personales de cada usuario (tipo C:\users\IDusuario\). Eso lo hace bien, y el archivo se guarda en la ruta de cada usuario que lo usa, pero surge el problema 2 Problema 2: PowerQuery no trabaja con rutas relativas del tipo  "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" necesita que sea del tipo fija "C:\users\IDusuario\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" pero claro, IDusuario es diferente para cada usuario.   Pero escribiendo todo esto, creo que he dado con una posible solución, no grabar el export en una ruta de usuario, sino en una en la raiz de C:, que siempre será igual para todos los usuarios, del tipo C:\Sap\export.xlsx que seria igual en todos los ordenadores. Asi sí podría decirle a PowerQuery que vaya siempre a la ruta C:\Sap\ que existirá en todos los ordenadores. Mañana intentaré hacer pruebas, aunque mi solución ideal seria que se pudiera guardar en el SharePoint. Saludos.
    • Hola La opción brindada por @torquemada es correcta, funciona, pero hay algunos inconvenientes que (desde mi punto de vista) no la convierten en mi primera elección. Los inconvenientes son: Tendrías que ir columna por columna haciendo los reemplazos, claro que no se harían a mano sino que utilizarías la opción reemplazar o la opción texto en columnas, aun asi demorará un poquito y será trabajoso. Cada vez que descargues otro listado, tendrás que volver a realizar los reemplazos. Me parece una mejor propuesta lo siguiente: Descarga los movimientos a un archivo de Excel Desde tu control de pagos (otro archivo) cargas los movimientos del archivo descargado mediante Power Query Power Query hará los reemplazos y reconocerá todo correctamente (sin que tengas que hacer nada especial) Cuando descargues los movimientos un día posterior, solamente tendrás que hacer clic en "Actualizar" y todo funcionará en automático
    • Hola a todos, Efectivamente, me temo que tal como trabajan las funciones =HOY() y/o =AHORA() (volátiles), sólo con macros puedes obtener soluciones. Un recurso pedestre podría ser, cada vez que quieras que se fije un dato, te sitúes en esa celda y pulses F2, F9 e INTRO.  Pero claro, puede ser un inconveniente si hay que hacerlo repetitivamente en muchas ocasiones,.............. en fin, lo comento sólo como posibilidad. Saludos,
    • Hola nuevamente, mi duda sigue siendo la ruta, o rutas, finales que quedan, esas que llamas "relativas"; igual por si acaso pon 3 o 4 de esas, tal cual son y/o se ven en el explorador de cada PC y, de ser posible, en cualquier otro "lado" en que las veas.
    • Hola, tal cual se plantea, solamente con macros (VBA); en todo caso, hacerlo a mano o con "CTRL + ;". Saludos.
  • 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.