2017-06-02 1 views
0

J'ai un formulaire dans access ("F_Filter") où j'indique les paramètres pour filtrer une datable. Le formulaire F_Filter contient également un sous-formulaire qui affiche les résultats datables filtrés sur le même écran. Ce sous-formulaire avec les résultats filtrés est nommé "Child400". Son objet source est "F_FilterResults".Ouvrir un sous-formulaire dans Access dans une nouvelle fenêtre

Je voudrais être en mesure de 1) ouvrir le sous-formulaire dans une nouvelle fenêtre de sorte que tout ce que je vois sont les résultats filtrés et 2) exporter les résultats vers Excel.

Normalement, je serais en mesure d'ouvrir un formulaire dans une nouvelle fenêtre en créant un bouton et la création d'un événement on cliquez avec le code suivant

DoCmd.OpenForm "NameOfForm", acFormDS 

Cependant, ce code ne fonctionne pas lorsque je mets " Child400 "en tant que NameOfForm. Je pense que c'est parce que Child400 est un sous-formulaire et n'est pas reconnu par Access. J'ai également essayé DoCmd.OpenForm "[F_Filter]![Child400]", acFormDS en vain. Notez que j'ai également essayé DoCmd.OpenForm "F_FilterResults", acFormDS qui fonctionne bien mais cette table contient seulement les résultats préfiltrés.

Répondre

0
DoCmd.OpenForm "F_FilterResults" 

est la forme correcte à ouvrir. "Child400" est (je suppose) le nom du contrôle de sous-formulaire. Ce n'est pas une forme que vous pouvez ouvrir.

Ensuite, vous devez appliquer le même filtre que vous avez fait à l'instance de sous-formulaire. La même méthode que vous utilisez maintenant pour le sous-formulaire peut être utilisée pour le formulaire séparé.

Si vous avez des problèmes avec cela, s'il vous plaît ajouter le code de filtre existant à votre question.

Modifier

Il n'y a pas de magie derrière ce formulaire montre enregistre un. Il est contrôlé par un couple de propriétés. Le plus simple est probablement de les prendre simplement dans le nouveau formulaire.

Quelque chose comme:

Sub OpenResults() 

    Dim fSub As Form, fNew As Form 

    Set fSub = Me!Child400.Form 

    DoCmd.OpenForm "F_FilterResults", acFormDS 
    Set fNew = Forms!F_FilterResults 

    fNew.RecordSource = fSub.RecordSource ' if you change the RecordSource in your code 
    fNew.Filter = fSub.Filter 
    fNew.FilterOn = fSub.FilterOn 
    fNew.OrderBy = fSub.OrderBy 
    fNew.OrderByOn = fSub.OrderByOn 

End Sub 
+0

J'ai essayé d'appliquer le même code à F_FilterResults mais les résultats ne sont pas les mêmes. (Notez qu'il y a quelques autres événements et paramètres que j'applique au sous-formulaire et F_FilterResults que je n'ai pas mentionné dans mon post car ils sont quelque peu compliqués et étrangers à ce que j'essaye de faire maintenant). J'ai passé quelques heures à essayer de comprendre où je me suis trompé en appliquant le même code à F_FilterResults mais je n'ai pas de chance. En tant que tel, je veux simplement faire un travail pour afficher ce que je vois dans le sous-formulaire Child400. – Danny

+0

@Danny: voir modifier. – Andre