Comparar selección de un combobox con una columna

Estoy iniciándome en el mundo de las macros y VBA y por temas de trabajo me encuentro con un problema que no he podido resolver.
Espero alguno de ustedes pueda ayudarme:
Tengo el siguiente Useform que el usuario debe rellenar:

Al seleccionar algunas clasificaciones de materiales desde el primer combobox, habilita el segundo para poder seleccionar el tipo de material especifico.

Al completar el formulario, y clickear en guardar los datos deben guardarse, dependiendo del material seleccionado, en 3 hojas distintas (en ninguna de estas se repite algún material, solo es una clasificación interna de inventario).

Por ejemplo: si el usuario a escogido algún material de la hoja "Domiciliario" en esta deben guardarse los datos de la siguiente forma:

Lo mismo debiese ocurrir si el material seleccionado pertenece a una de las otras 2 hojas. Además cada ingreso nuevo se guarda en una tabla en "Hoja1"(la cual ira oculta para el usuario"), lo cual ya tengo resuelto.
Ya tengo validado el ingreso de datos en los textbox "Incidencia", "Cantidad" y "Fecha", para que solo se deban ingresar valores numéricos y de fecha
Entonces, cada vez que el usuario utilice el formulario, la información se guarde en la siguiente columna desocupada, de la hoja que corresponda.
Les dejo adjunto el archivo para mayor comprensión
Macro.rar

1 Respuesta

Respuesta
1

A ver si entiendo

1 - quiere que la macro busque la ultima columna vacía del product seleccionado en el combobox2

2 - que copie la cantidad solicitada en el userform

Siendo así lo puedes conseguir por emdio de una búsqueda y selection

Set h = Sheets("results")
    Set b = h.Columns("A").Find(ComboBox)
        If Not b Is Nothing Then
        
  b.select
            If b = ComboBox.Value Then
            ActiveCell.End(xlToRight).Offset(0, 1) = cantidad
            End If
        End If

Donde

Combobobx va el nombre que tengas en el combobox tuyo

Results es el nopmbre de tu hoja

Si te silve no olvides valora para cerrar la pregunta 

Claro! pero que esta busqueda la realice en las 3 hojas ("Domiciliario", "Operación", "Mantención") y ademas copie arriba, como mostré en la imagen, la fecha y la incidencia.

Gracias

He intentado adecuar tu idea a mi problema, pero al hacer click en guardar no pasa nada, no escribe el valor de la cantidad en donde corresponde, la verdad es que no se que es lo que ocurre

Este es el código del la acción "GUARDAR_Click":

Private Sub GUARDAR_Click()
'Si esta activo el combobox 2
If CMBMATERIAL2.Enabled = True Then
'Busqueda en hoja DOM
Set h = Worksheets("DOM")
Set b = Range("MATERIAL_DOM").Find(CMBMATERIAL2, lookat:=xlWhole)
If Not b Is Nothing Then
If b = CMBMATERIAL2.Value Then
ActiveCell.End(xlToRight).Offset(0, 1) = Me.TXTCANTIDAD.Value
End If
Else
'Busqueda en hoja OP
Set h = Worksheets("OP")
Set b = Range("MATERIAL_OP").Find(CMBMATERIAL2, lookat:=xlWhole)
If Not b Is Nothing Then
If b = CMBMATERIAL2.Value Then
ActiveCell.End(xlToRight).Offset(0, 1) = Me.TXTCANTIDAD.Value
End If
Else
'Busqueda en hoja MAN
Set h = Worksheets("MAN")
Set b = Range("MATERIAL_MANT").Find(CMBMATERIAL2, lookat:=xlWhole)
If Not b Is Nothing Then
If b = CMBMATERIAL2.Value Then
ActiveCell.End(xlToRight).Offset(0, 1) = Me.TXTCANTIDAD.Value
End If
End If
End If
End If
' Si solo esta activo el combobox 1
Else
Set h = Worksheets("DOM")
Set b = Range("MATERIAL_DOM").Find(CMBMATERIAL, lookat:=xlWhole)
If Not b Is Nothing Then
If b = CMBMATERIAL.Value Then
ActiveCell.End(xlToRight).Offset(0, 1) = Me.TXTCANTIDAD.Value
End If
Else
Set h = Worksheets("OP")
Set b = Range("MATERIAL_OP").Find(CMBMATERIAL, lookat:=xlWhole)
If Not b Is Nothing Then
If b = CMBMATERIAL.Value Then
ActiveCell.End(xlToRight).Offset(0, 1) = Me.TXTCANTIDAD.Value
End If
Else
Set h = Worksheets("MAN")
Set b = Range("MATERIAL_MANT").Find(CMBMATERIAL, lookat:=xlWhole)
If Not b Is Nothing Then
If b = CMBMATERIAL2.Value Then
ActiveCell.End(xlToRight).Offset(0, 1) = Me.TXTCANTIDAD.Value
End If
End If
End If
End If
End If
End Sub

No se que es lo que esta mal

:/

Prueba con estos

Private Sub GUARDAR_Click()

If CMBMATERIAL2.Value = "" Then
DATO = CMBMATERIAL.Value
Else
DATO = CMBMATERIAL2.Value
End If
For Each hoja In ThisWorkbook.Worksheets
If hoja.Name <> Hoja2.Name And hoja.Name <> Hoja1.Name Then
Set busca = hoja.Columns(4).Find(DATO, LookIn:=xlValues, lookat:=xlWhole)
If Not busca Is Nothing Then
busca.End(xlToRight).Offset(0, 1) = TXTCANTIDAD
End If
End If
'End If
Next

End Sub

Me podrías explicar esta línea de código, lo entiendo cual seria su significado

If hoja.Name <> Hoja2.Name And hoja.Name <> Hoja1.Name Then

Gracias!

Estos dice que si la hoja seleccionada su nombre es el nombre de la hoja2 o hoja1

Entonces haga la búsqueda en todas las hojas que existan

Gracias! Pero me al utilizar este código ahora me da error '1004': Error definido por la aplicación o el objeto, en la siguiente línea de código:

busca.End(xlToRight).Offset(0, 1) = TXTCANTIDAD

[email protected] escribe me para mandarte el blibro con la macro ya incluida

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas