Su pregunta es una alternativa buena para no adicionar el botón de eliminar por cada registro y evitar el uso de la tecla DEL para eliminar. Martha le explico por partes.
1. Código asociado al subformulario
- En propiedades, eventos, tecla de vista previa en SI. Esto para poden capturar la tecla DEL
- Ingrese este código en el evento Al bajar una tecla.
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 46 Then 'Tecla Suprimir
KeyCode = 0
End If
End Sub
- Código para el botón Eliminar (desde el subformulario)
Private Sub btnEliminar_Click()
If Not Me.NewRecord Then
If MsgBox("¿Estás seguro de que deseas eliminar este registro? " & vbCrLf & Me.cboproducto.Column(1), vbQuestion + vbYesNo, "Confirmar eliminación") = vbYes Then
Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone
rs.FindFirst "[idproducto] = " & Me.idproducto ' Reemplace "idproducto" con el nombre del campo clave del registro
If Not rs.NoMatch Then
rs.Delete
Me.Requery
End If
rs.Close
Set rs = Nothing
Me.OrderBy = "id"
Me.OrderByOn = True
DoCmd.GoToRecord , , acNewRec
End If
Else
MsgBox "Está en un nuevo registro", vbInformation, "Le informo"
End If
End Sub
En este código asumo que el subformulario tiene como origen de datos una tabla temporal y que tiene un campo "id".
2. Código asociado al formulario principal
Código del botón Eliminar (Formulario principal)
Private Sub btnEliminar_Click()
Dim subformulario As Form
' Obtener referencia al subformulario
Set subformulario = Me.frmSubFactura.Form
' Verificar si hay un registro seleccionado en el subformulario
If Not subformulario.Recordset.EOF Then
' Guardar el valor del registro actual
Dim registroActual As Variant
registroActual = subformulario!cboproducto.Value
If IsNull(registroActual) Or registroActual = 0 Then
MsgBox "Estas en un nuevo registro", vbInformation, "Retirando registro"
Exit Sub
End If
' Eliminar el registro actual en el subformulario
If MsgBox("¿Está seguro de retirar el registro?", vbQuestion + vbYesNo + vbDefaultButton2, "Retirando registro") = vbYes Then
subformulario.Recordset.Delete
Else
Exit Sub
End If
' Actualizar el subformulario
Subformulario. Requery
' Buscar el registro actualizado
subformulario.Recordset.FindFirst "idproducto= " & registroActual
subformulario.Recordset.MoveLast
subformulario.Recordset.AddNew
' Pasar el foco al subformulario
Me. FrmSubFactura. SetFocus
End If
End Sub
En este código asumo que al campo el cuadro combinado del subformulario lo llama cboproducto. Respecto a su pregunta personalmente le recomiendo retirar el registro desde el formulario principal.
Espero le sirva, como tengo su correo le estoy enviando un ejemplo.