Hola,
contestando a la primera y tercera: Los datos introducidos los puedes controlar en el evento BeforeColUpdate del Datagrid. ej (uponemos que el DataGrid está enlazado a un control Data (Adodc1):
Código:
Private Sub DataGrid1_BeforeColUpdate(ByVal ColIndex As Integer, OldValue As Variant, Cancel As Integer)
Select Case ColIndex = 3
Case 0 ' suponemos que la 1ª columna es la de fecha
If Not IsDate(DataGrid1.Text) Then
MsgBox "Introduzca una fecha válida"
Adodc1.Recordset.CancelUpdate
End If
Case 1, 2, 3 ' las columnas 2, 3 y 4 son obligatorias
If IsNull(DataGrid1.Text) Then
MsgBox "El campo no puede estar vacío"
Adodc1.Recordset.CancelUpdate
End If
Case 4
'''''
End Select
End Sub
En cuanto a la segunda, podrías cargar el combo en invisible y cuando el usuario pase a la celda correspondiente, hacerlo visible y en el evento Click del Combo pasarle el valor seleccionado al recordset y volverlo a hacer invisible.