Ordenar los campos de un subformulario perteneciente a un formulario al que anteriormente le he aplicado un combo con vba

Tengo un formulario con varios subformularios los cuales estàn ordenados internamente por fecha.

Al formulario principal le aplico un filtro con un combo en vba y funciona correctamente pero los

Subformularios pierden su orden.

1 respuesta

Respuesta
1

Es raro, porque al estar relacionados el formulario y los subformularios por un campo común, si aplicas un filtro al formulario automáticamente los subformularios mostrarían aquellos registros que estén relacionados. Por ejemplo, supongamos que tienes un formulario Clientes, con, por ejemplo, Idcliente, nombre, etc y varios subformularios DetalleVenta, DetalleCompra, etc., relacionados por el Idcliente. En el momento que apliques un filtro y te seleccione el Idcliente=19(o nombrecliente=Pepe) los subformularios mostrarían los registros que tuvieran como idcliente=19.

Pero, ante la duda, en la instrucción en la que aplicas el filtro puedes añadirle

me.detalleventa.form.recordsource="select * from detalleventa where idcliente=" & me.idcliente & " order by fechaventa"

Los demás igual.

Hola Icue, gracias por la respuesta tan rápida.

El filtro me funciona bien, y los subformularios (sin el filtro también), es cuando aplico el filtro que se me desordenan.

Podria provar de añadir el order by, pero no se dónde dado que cada subformulario se ordena por campos distintos. Yo lo que quiero es que no me pierdan el orden que tenian.

Te paso el filtro que uso y como tengo configurado uno de mis subformularios:

Mi filtro:

Private Sub Familia_Click()

'Creo una variable para guardar el filtro por Familia

sFiltro As String
Dim sFamilia As String

'Construyo la cadena para filtrar por Familia
If Not IsNull(Me.Familia) And Me.Familia <> "" Then
sFamilia = "Familia LIKE '" & Me.Familia & "'"
Else
sFamilia = ""
End If
Me.Subfamilia.Requery
' construyo el filtro final que se enviará al subformulario.
If sFamilia <> "" Then
sFiltro = sFamilia
End If
'Y a partir de aquí, si la variable sFiltro no está vacía se la aplico al subformulario
If sFiltro <> "" Then
'Asigno la varaible a la propiedad Filter del subformulario
Me.Form.Filter = sFiltro
'Le digo al subformulario que active el filtro que previamente he asignado.
Me.Form.FilterOn = True

Else
Me.Form.FilterOn = False
End If

End Sub

Y uno de mis subformularios:

Gracias.

Anna, con los datos, a palo seco, es difícil saber si la instrucción está bien. Pero te pongo un ejemplo. Si tengo un formulario Personas y un subformulario Familiares, relacionados por IdPersona

Como puedes ver los "familiares" están ordenados por nombre

Le he añadido un combinado llamado Elegir donde voy a elegir el grado de parentesco. Si elijo Primos

Como puedes ver siguen ordenados alfabéticamente

Si elijo otro

Los sigue ordenando, aunque no lo parezca. Es que el segundo al ser María con acento va después de Maria sin acento.

Y lo único que le digo en el evento Después de actualizar del combinado Elegir es

Private Sub Elegir_AfterUpdate()
Me.Familiares.Form.RecordSource = "select * from familiares where familiar like '" & Me.Elegir & "' and idpersona=" & Me.IdPersona & ""
End Sub

Es decir, que el origen de registros del subformulario Familiares sean todos aquellos registros de la tabla Familiares en que el campo familiar sea igual al que acabo de elegir en el combinado y que el campo que los relaciona sea el mismo. No necesito decirle que los ordene alfabéticamente.

Icue, no funciona. No sé que hacer.

Pon tu subformulario en orden descendiente haber si te sigue funcionando

Por fin lo he conseguido! Sólo he tenido que añadir:

Private Sub Form_Current()
Me.Form.OrderByOn = True
End Sub

Muchas gracias Icue por intentarlo.

Ana, se que alguno me crucificará, pero personalmente opino que son mejores los criterios que los filtros, por eso no los uso. Prefiero decir

.......="select cliente, pais from clientes where país=""España"" and pelo=""negro"" and Edad=37 or edad =25 and.... así hasta 99 condiciones.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas