Saltar al contenido

Opción a dejar sin seleccionar items de combobox al rellenar campos formulario


Mariam

Recommended Posts

publicado

Hola  de nuevo, 
He buscado en foro pero no encuentro 

Gracias a la ayuda de  @JasallBcn pude avanzar en lo que es mi primer formulario que he ido realizando de manera autodidacta a través de ejemplos encontrados en el foro y tutoriales diversos.
He ido creando lo que será el formulario final en otro archivo que no he subido por tema de datos....pero ahora me encuentro con un nuevo problema que no consigo dar con ello, intento explicar de forma resumida:
Se trata de los combobox,  si doy a grabar sin más de primeras pues me realiza la acción dejando las celdas sin datos. Bien, al dar siguiente pues veo que si elijo un item de alguno de los combos y dejo el resto sin seleccionar da error . Intuyo que como se supone que limpia los datos introducidos pues borra todo... y ahí está mi problema que no sé como solucionar eso  ? me bloqueo y por simple que sea la solución no doy con ello

La idea es que se pueda rellenar el formulario dejando alguno de los comobox sin seleccionar nada. El que será trabajo final, lleva más campos, tanto de listBox como combobox y  queremos dejar la opcion a no estar obligado el rellenar todos los combos/campos

Adjunto el archivo de prueba.
 

Prueba-Multi_v2.xlsm

publicado

Muchas gracias @Antoni por el cambio. Ha sido como un clic para verlo de otra manera.
Está mejor con las casillas, pero es que además me has hecho ver que quizás no me he explicado bien y  me has dado que pensar. He mirado los cambios y le he dado otra vuelta.

He añadido  codigo al botón siguiente y así realiza el cometido aunque dado mi limitado conocimiento, no sé si sería lo indicado y caiga en errores una vez más.

El boton que nombro como "siguiente" su función sería que una vez le das a grabar, clicas sobre "siguiente" para limpiar el formulario y seguir  introduciendo datos. Entiendo que con eso  dejaba todo limpio, tanto que eliminaba las indicaciones de de UserForm Initialize en cuando a los combobox, y entonces si no rellenaban todos era cuando me daba error. 
 Está claro que tengo que mejorar la usabilidad del formulario y sobre todo el tema código, ? Estoy en ello y espero que con empeño  lo consiga.
 

Prueba-Multi_v3.xlsm

publicado

@Mariam¿Has pensado, quizás, que podría ser más útil que en el mismo momento de "Grabar" se limpiara el formulario?

Si tu idea es "Grabar" y luego dar a "Siguiente" para limpiarlo, ese paso te lo saltarías si lo haces todo en el primero.
No he entrado en el archivo, pero es una cuestión de organización que pueda facilitarte la forma de incluir el código.

Saludos también para @Antoni

Tese

publicado

Hola @tese1969  sí esa es la idea, ir grabando datos seguidos. Es para un control de usuarios, donde se iran introduciendo conforme a unos documentos en los que previamente se han ido tomando nota. 
Ciertamente es mejor opción.
Gracias por tu idea, ? voy a dar otra vuelta, espero no liarla mucho. 

publicado

Buenas, @Mariam

Muchas veces no somos conscientes de que la parte fundamental de un fichero Excel es la que no se ve, es decir, la que representa la idea que el autor tiene sobre el uso que va a dar a los datos que se incluirán posteriormente. Si tú tienes claro lo que quieres hacer y lo que necesitas tu diseño tenderá a responder a dicha idea. La parte más técnica siempre puede ser consultada en foros como este ó disponer de alguna ayuda externa, pero el "espíritu" del archivo debe corresponder al autor.

Por supuesto, te animo a que te estrujes el cerebro en ese afán de aprender a hacer las cosas por ti misma. Ese esfuerzo de hoy será tu orgullo de mañana. Algunos de los que intentamos echar una mano en este foro somos totalmente autodidactas, sin conocimientos previos de programación, pero con muchas horas intentando comprender cómo funciona esta herramienta tan maravillosa llamada VBA. Poco a poco te darás cuenta de que puedes hacer cosas muy chulas y realmente útiles para tu día a día si eres usuaria habitual de Excel en el ámbito laboral o personal.

Un saludo,

Tese

publicado
En 23/12/2022 at 11:42 , Mariam dijo:

Gracias por tu idea, ? voy a dar otra vuelta, espero no liarla mucho. 

Qué tal @Mariam. Soo tienes que colocar el código de @Antoni al final de la macro del botón "Grabar", no hay que hacer nada más ;)

publicado

Hola @Haplox Qué tal?   tomo nota  de tu aporte ?
Con estas fechas no he podido dedicarle tiempo, pero ciertamente he estado a ratos dándole vueltas mentalmente a como hacelor para  no "sobrecargar" de código.
Mañana quiero ponerme a ello, por un lado me viene bien lo comentado por @tese1969    y tomando las primeras indicaciones  @Antoni  e ideas que se han ido exponiendo, espero darle forma adecuada y que quede mucho mejor.
Muchar gracias @Haplox  y a todos lo que me estáis echándo una mano.

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
      188
    • Comentarios
      98
    • Revisiones
      29

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

    4    1

  • Crear macros Excel

  • Mensajes

    • Hola, veo que tienes 365, así que esta forma funcionará   Almacen.xlsx
    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
  • 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.