Macro para eliminar valores coincidentes de una celda, al ingresar un valor en un TextBox

Se trata de una macro para almacenamiento de mercadería, el cual consta de 32 casilleros, cada uno con 4 espacios para almacenar 4 pedidos. En el ComBobox tengo los casilleros del 1 al 32; En los 4 labels que siguen, me muestran los números (folios) de los pedidos encasillados; En el TextBox ingreso los folios de pedidos; Al presionar buscar, busca en que casillero tengo el pedido que estoy consultando, y el label de al lado me muestra la respuesta; El botón cancelar ya esta programado y limpia los datos del UserForm. Mis problemas son los botones agregar y eliminar... Necesito que, seleccionando un casillero en el ComboBox, me asigne un rango, y los datos que ingrese se limiten a ser ingresados en ese rango Ejemplo: Casillero 1 = rango B3: B6, Si ya no hubiesen espacios en ese casillero, no me deje seguir ingresando datos, y me arroje un mensaje de error para asignar otro casillero. Y al botón eliminar, para que, al quitar la mercadería de un casillero, al ingresar el numero de folio en el TextBox, pueda eliminarlo de la planilla, dejando un espacio vacío para ingresar otro nuevo folio. Agradecería un poco de orientación y si es posible una breve explicación de como solucionarlo (no solo el código listo para copiar pegar), ya que, como dicen, "dame una caña y enséñame a pescar...", se agradece cualquier aporte ya que eh buscado mucho en Internet, y aun no doy con la solución. (Dejo print de la planilla y el código por si es de utilidad, hace mucho no programo y puede que algún procedimiento se pueda acortar, al menos así es como yo supe encararlo...)

1 Respuesta

Respuesta
2

Creo que lo mejor sería que tengas una lista con los rangos que ocupa cada casillero, imaginemos en Hoja1:

Luego, al seleccionar un nro en el combobox1 se busca el rango asociado y se calcula cuántas celdas llenas tiene ese rango... y según eso será lo que necesites realizar. Por ahora solo un mensaje cuando están todas llenas. No me quedó claro qué pasa si solo tenés algunos espacios, supongo que no permitirás que se sigan llenando todos los textbox.

Private Sub ComboBox1_Change()
'x Elsamatilde
'hojas involucradas
Set ho1 = Sheets("Hoja1")    'lista de rangos
Set ho2 = Sheets("Hoja2")    'casilleros
'se busca el rango de la casilla seleccionada (función BuscarV)
Set busco = ho1.Range("A:A").Find(ComboBox1, LookIn:=xlValues, lookat:=xlWhole)
rgo = Application.WorksheetFunction.VLookup(Val(ComboBox1), ho1.Range("A:B"), 2, False)
'se evalúa cuántas celdas llenas hay en el rango (función ContarA)
llenas = Application.WorksheetFunction.CountA(ho2.Range(rgo))
If llenas = 4 Then
    MsgBox "Ya se encuentran todas las celdas del rango llenas"
    Exit Sub
End If
'la variable llenas te permitirá controlar cuántos textbox ocupar
End Sub

Espero te sirva la idea y puedas avanzar en tu tarea.

PD) Acabo de publicar un video con el tema de cómo utilizar fórmulas en VBA. Podes leer más sobre el tema desde mi blog, allí encontrarás el link al video.

https://elsamatilde.blogspot.com/2018/10/colocar-formulas-mediante-vba.html 

Sdos!

La verdad, no entendí tu código...Para agregar folios use este código:

Private Sub CommandButton1_Click() 'Al presionar el boton AGREGAR
    Dim valortxbx As Long
    Dim Valida As Boolean
    Dim NroFila As Integer
    Dim NroColumna As Integer
    valortxbx = TextBox1.Value 'Valor del textbox
    Range(Celda).Select 'Seleccionamos la celda a analizar
    NroFila = ActiveCell.Row 'Fila seleccionada
    NroColumna = ActiveCell.Column 'Columna seleccionada
    For i = 1 To 4 'for que recorre las 4 casillas disponibles
        Cells(NroFila, NroColumna).Select 'Seleccionamos la celda
        If Cells(NroFila, NroColumna).Value = "" Then 'verificamos que la celda no tenga datos
            ActiveCell = valortxbx 'Si esta disponible insertamos el valor
            Valida = True 'Activamos la validacion para decir que todavía existe celda
            Exit For ' salimos para que no verifique nuevamente
        Else
            NroFila = NroFila + 1 'avanzamos en las filas
        End If
    Next
    If Valida = False Then 'si no entra nunca al valida true es porque ya no existe disponibilidad
        MsgBox "CASILLERO A TOPE DE CAPACIDAD, seleccione un casillero con espacio disponible", vbInformation, "Casilla llena"
    End If
End Sub

ahora mi problema consta únicamente en la programación del botón "ELIMINAR", en el cual, al digitar un valor en el textbox, si coincide con algún valor de la planilla, lo elimine de esta, de lo contrario, si el valor ingresado en el textbox, no esta en la planilla, me envíe un mensaje de error...aun no se como hacer para que, a través de un valor digitado en el textbox, me identifique la celda que lo contiene y borre su contenido. (no me sirvió mucho el articulo que me enviaste, pero estoy buscando orientación dentro de tu pagina). Se agradece la ayuda

Mi código, que creo está bastante explicado, hace esto que comenté:

Al seleccionar un nro en el combobox1 se busca el rango asociado y se calcula cuántas celdas llenas tiene ese rango

Y fue pensado así respondiendo a esta parte de tu extensa consulta:

Al seleccionar un nro en el combobox1 se busca el rango asociado y se calcula cuántas celdas llenas tiene ese rango

Por eso va en el evento del combobox.

Si lo resolviste de otro modo está todo bien... pero la respuesta te fue enviada según lo solicitado en esa parte de tu consulta.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas