web-dev-qa-db-fra.com

Comment appeler une fonction VBA dans une procédure secondaire

Je sais que la question est simple pour quelqu'un, mais je n'ai jamais vraiment utilisé de module de fonction car je ne comprenais pas ce que c'était.

Donc, j'ai beaucoup de choses que je peux utiliser pour (réduire la redondance), mais je veux savoir comment j'appelle dans une procédure secondaire (comme un clic de bouton) à partir d'un formulaire.

J'ai essayé ça ...

Sub Command_Click()
    Call "pptCreator"
End Sub

Je sais que c'est très grave, mais je ne sais pas comment intégrer cela dans une procédure.

13
Justin

Voici différentes manières d’appeler des choses dans Microsoft Access:

Pour appeler un formulaire ou une fonction à partir d'un module

Le sous-formulaire dans le formulaire que vous appelez DOIT être public, comme dans:

Public Sub DoSomething()
  MsgBox "Foo"
End Sub

Appelez le sous comme ceci:

Call Forms("form1").DoSomething

Le formulaire doit être ouvert avant de faire l'appel.

Pour appeler une procédure événementielle, vous devez appeler une procédure publique dans le formulaire et appeler la procédure événementielle dans cette procédure publique.

Pour appeler un sous-programme dans un module à partir d'un formulaire

Public Sub DoSomethingElse()
  MsgBox "Bar"
End Sub

... appelez-le directement depuis votre procédure événementielle:

Call DoSomethingElse

Pour appeler une sous-routine à partir d'un formulaire sans utiliser de procédure événementielle

Si vous le souhaitez, vous pouvez réellement lier la fonction à l'événement du contrôle de formulaire sans avoir à créer une procédure d'événement sous le contrôle. Pour ce faire, vous avez d’abord besoin d’une fonction publique dans le module au lieu d’un sous-objet, comme ceci:

Public Function DoSomethingElse()
  MsgBox "Bar"
End Function

Ensuite, si vous avez un bouton sur le formulaire, au lieu de mettre [Procédure événementielle] dans l'événement OnClick de la fenêtre de propriété, placez ceci:

=DoSomethingElse()

Lorsque vous cliquez sur le bouton, la fonction public du module est appelée.

Appeler une fonction au lieu d'une procédure

Si appeler un sous ressemble à ceci:

Call MySub(MyParameter)

Puis appeler une fonction ressemble à ceci:

Result=MyFunction(MyFarameter)

où Résultat est une variable de type renvoyée par la fonction.

NOTE: Vous n'avez pas toujours besoin du mot clé Call. La plupart du temps, vous pouvez simplement appeler le sous-marin comme ceci:

MySub(MyParameter)
28
Robert Harvey

si pptCreator est une fonction/procédure dans le même fichier, vous pouvez l'appeler comme suit

call pptCreator()

3
shahkalpesh

Appel d'une procédure secondaire - technique 3 voies

Une fois que vous avez une procédure, que vous l'ayez créée ou qu'elle fasse partie du langage Visual Basic, vous pouvez l'utiliser. L'utilisation d'une procédure est également appelée l'appelant.

Avant d'appeler une procédure, vous devez d'abord localiser la section de code dans laquelle vous souhaitez l'utiliser. Pour appeler une procédure simple, tapez son nom. Voici un exemple:

Sub CreateCustomer()
    Dim strFullName As String

    strFullName = "Paul Bertrand Yamaguchi"

msgbox strFullName
End Sub

Sub Exercise()
    CreateCustomer
End Sub

En plus d'utiliser le nom d'une procédure pour l'appeler, vous pouvez également la faire précéder du mot-clé Call. Voici un exemple:

Sub CreateCustomer()
    Dim strFullName As String

    strFullName = "Paul Bertrand Yamaguchi"
End Sub

Sub Exercise()
    Call CreateCustomer
End Sub

Lorsque vous appelez une procédure, sans ou sans le mot clé Call, vous pouvez éventuellement taper une parenthèse ouvrante et une souris fermante à droite de son nom. Voici un exemple:

Sub CreateCustomer()
    Dim strFullName As String

    strFullName = "Paul Bertrand Yamaguchi"
End Sub

Sub Exercise()
    CreateCustomer()
End Sub

Procédures et niveaux d'accès

A l'instar d'un accès variable, l'accès à une procédure peut être contrôlé par un niveau d'accès. Une procédure peut être rendue privée ou publique. Pour spécifier le niveau d'accès d'une procédure, faites-le précéder du mot clé Privé ou du mot clé Public. Voici un exemple:

Private Sub CreateCustomer()
    Dim strFullName As String

    strFullName = "Paul Bertrand Yamaguchi"
End Sub

Les règles qui ont été appliquées aux variables globales sont les mêmes:

Privé: Si une procédure est rendue privée, elle peut être appelée par d'autres procédures du même module. Les procédures de modules externes ne peuvent pas accéder à une telle procédure.

De même, lorsqu'une procédure est privée, son nom n'apparaît pas dans la boîte de dialogue Macros.

Public: Une procédure créée en tant que public peut être appelée par les procédures du même module et par les procédures d'autres modules.

De même, si une procédure a été créée en tant que publique, lorsque vous accédez à la boîte de dialogue Macros, son nom apparaît et vous pouvez l'exécuter à partir de là.

3
Rockey

Les procédures d'un module commencent à être utiles et génériques lorsque vous transmettez des arguments.

Par exemple:

Public Function DoSomethingElse(strMessage As String)  
    MsgBox strMessage
End Function

Peut maintenant afficher n'importe quel message transmis avec la variable de chaîne appelée strMessage.

1
Mark3308

Pour ajouter une fonction à un nouveau bouton de votre formulaire: (et évitez d’utiliser une macro pour appeler une fonction)

Après avoir créé votre fonction (Function MyFunctionName ()) et que vous êtes en mode Création de formulaire: 

  1. Ajouter un nouveau bouton (je ne pense pas que vous puissiez réaffecter un ancien bouton - pas sûr cependant). 
  2. Lorsque la fenêtre du bouton Wizard s'ouvre, cliquez sur Annuler. 
  3. Accédez à l'onglet Propriétés des propriétés des boutons - Sur le clic.
  4. Dans ce menu déroulant, sélectionnez: Procédure d’événement.
  5. Maintenant, cliquez sur le bouton à côté du menu déroulant qui contient ... et vous serez dirigé vers un nouveau Private Sub dans la fenêtre de formulaires Visual Basic.
  6. Dans ce type de sous-ensemble privé: Appelez MyFunctionName
    Ça devrait ressembler a quelque chose comme ca:

Private Sub Command23_Click ()

Appelez MyFunctionName

End Sub

  1. Ensuite, sauvegardez-le.
0
Gary C