But de l'utilisation de sous-routines sur les fonctions
J'ai travaillé avec Accès pour un certain temps maintenant, et même si je comprends l'avantage évident d'une Fonction sur un Sous, il peut renvoyer des valeurs comme un résultat, je ne sais pas pourquoi je devrais utiliser un Sous plus d'une Fonction. Après tout, si je ne me trompe, les Fonctions peuvent tout faire Subs peut faire?
Note: je suis pleinement conscient de la façon d'utiliser les deux Sous et la Fonction n'est donc pas la recherche d'une explication de la façon dont ils travaillent.
source d'informationauteur Matt Donnan
Vous devez vous connecter pour publier un commentaire.
La principale différence n'est pas seulement la valeur de retour, il semble que les sous-marins sont plus rapides que les fonctions
(au moins dans .net) parce que le code MSIL de sous-marins est beaucoup plus courte lorsque aucune valeur n'est renvoyée. donc dans l'ensemble des sous-marins sont plus rapides lorsque aucune valeur n'est renvoyée.
oh, j'ai juste trouvé une grande source pour cela (parle .net), peut-être que vous aimeriez en savoir davantage sur elle- Fonctions vs sous-Routines
En termes de performances, ce ne serait pas question importante ici.
La principale différence est que la fonction définie par l'utilisateur peut être utilisé dans l'expression dans votre code, où, comme un sous ne le peuvent pas.
C'est vraiment un ÉNORME Mont Everest de la différence ici.
Cette différence n'est pas vraiment limité à l'Accès, mais tend à s'applique à toute la programmation de langue et de système je pense, qui prend en charge la création de fonctions définies par l'utilisateur.
Les principaux avantages de l'utilisation de la fonction définie sont NOMBREUSES, mais la plus basique problème est que cette fonction peut être utilisée dans des EXPRESSIONS.
Par exemple, dans un cliquez sur réglage pour un bouton sur un formulaire, vous pouvez généralement avoir une seule VBA [Event Code] routine attaché à ce bouton.
Cependant, vous pouvez ÉGALEMENT placer une expression dans la feuille de propriétés comme ceci:
Ci-dessus est un conseil pratique, car vous pouvez alors mettre en évidence 10 contrôles sur un formulaire, et le type dans l'expression ci-dessus et vous venez d'affecter la fonction ci-dessus pour ces 10 boutons. Vous ne pouvez pas faire ci-dessus avec un sous.
Une autre différence importante est que vous pouvez utiliser une fonction comme une source de données (expression) pour une zone de texte dans un formulaire ou un état (encore une fois vous ne pouvez pas faire cela avec un sous).
Une autre différence importante est que vous pouvez utiliser ces fonctions en SQL. C'est une fantastique capacité, alors vous pouvez avoir le code "exécuter" pour chaque ligne d'une requête. Et cela signifie que vous pouvez étendre la capacité et les fonctionnalités de SQL.
Et vous pouvez même utiliser cette idée pour afficher une VBA variable dans une requête sql que vous créez simplement une fonction publique qui renvoie le VBA variable et il peut être utilisé dans une requête – cependant on ne peut pas utiliser des variables VBA dans une requête!
Et cette extension de SQL ouvre d'innombrables idées:
Afin que je puisse construire une fonction publique appelée Demain()
Maintenant dans le générateur de requêtes, je peux aller:
Et vous pouvez même faire de la coutume des conversions telles que:
Au-dessus de la température Quotidienne de la lecture, pourraient en en Fahrenheit et il vous suffit de définir une fonction publique appelée Celsius comme ceci:
Maintenant, alors que la fonction ci-dessus est simple, elle pourrait faire de complexe record du traitement d'un algorithme complexe pour déterminer la teneur en eau au-dessus d'un pot de fleur en fonction de la température et de l'humidité.
Donc, une fois de nous définir une telle fonction publique, puis le concept clé est une telle fonction peut être utilisée non seulement dans le code VBA comme une expression, mais peut AUSSI être utilisé incroyable cette capacité inclut SQL.
De sorte que même dans le code, vous pouvez aller:
De nouveau dans ce qui précède, vous ne pouvez pas utiliser un sous VBA expressions.
Et encore plus intéressant, c'est lors de l'utilisation de XML personnalisé pour les rubans d'Accès, alors si vous utilisez une fonction() l'expression "action" attribut ensuite, vous pouvez éviter le besoin de ruban de rappel. Encore mieux, c'est le ruban appel de ces fonctions() dans la forme actuelle, pas un public module de code comme vous DEVEZ le faire avec le ruban de rappel.
Je pourrais probablement de type pour un autre 10+ pages de la différence, mais je pense que ce serait commencer à être redondant et je ne veux pas apparaître par condensation de toute façon ici.
Donc la différence fondamentale entre un sous et la fonction en VBA ou en fait, dans la plupart des langages de programmation est tout à fait la même.
Et les avantages de l'utilisation d'une fonction dans l'Accès ou juste au sujet de toute la programmation de langue sont également les mêmes. Par exemple, je peux définir une fonction définie par l'utilisateur en t-sql (scalaire) – et, de nouveau, puis, vous êtes libre de les utiliser que de t-sql fonction de vos code t-sql ou encore les cahiers de créer et d'utiliser pour sql server.
Donc, c'est basique et simple différence entre une sous et une fonction, et j'ose dire que ceux qui ont écrit le code informatique sera à peu près toute la programmation de langue instantanément atteindre ces importants et utiles différences entre une sous-routine et une fonction.
Oui, une Fonction est un Sous qui retourne une valeur.
Je ne suis pas absolument sûr, cependant, je pense que les sous-marins sont plus rapides que les fonctions, car les variables d'un sous-programme sont définis au moment de la création de la sous-routine et sont accessibles par la référence à l'emplacement de la mémoire. Les fonctions doivent allouer de la mémoire de l'espace à chaque fois qu'ils sont accessibles.
Sous-routines modifier les variables dans le code appelant et fonctions de les laisser intacts. Si un sous-programme peut fournir plusieurs modifié des éléments d'information pour le code appelant (comme beaucoup de changements car il y a des variables, y compris les tableaux), mais une fonction ne peut fournir une réponse à la fois pour les valeurs qui sont transmises. En raison de cette différence, si il est important qu'une variable dans un sous-programme ne change pas sa valeur, on doit attribuer la valeur d'une variable temporaire définie dans le sous-programme lui-même.
FWIW (ma théorie 😉 -
Permet de penser le monde réel pour le comprendre.
Permet de dire que vous voulez faire quelque chose. Il y a (au moins) 2 façons de le faire.
Première manière, d'envoyer des demandes de renseignements à des aides et ils seront de retour avec les informations pour vous. si vous gardez le contrôle c'est à dire toute l'info circule de nouveau à vous et à vous de décider quoi faire ensuite. c'est plus de la commande centralisée de l'environnement. c'est l'essence même de la "fonction" en vba
Seconde manière de diviser le travail en tâches distinctes et attribuer la responsabilité de votre aide pour terminer la tâche pour vous ie travail est effectuée ici par des aides contrairement à un simple rassemblement d'informations. C'est l'essence même de la " sub " dans vba.
Donc penser que faire si le code des pauses. avec les appels de fonction, vous vous concentrez sur la centrale de commande à chercher la raison de l'échec. Avec les sous les appels, vous devez exécuter dans chaque sous de travail et trouver ce qu'il a fait de mal.
Bien sûr, vous pouvez visser le but et les fonctions effectuer des travaux et des sous-marins simplement obtenir des informations, mais qui serait tout simplement être vraiment déroutant quand les choses se brisent! Oh mais tu ne peux pas le faire, lire ce lien - http://www.cpearson.com/excel/differen.htmqui stipule que Excel interdit fonctions changeant les valeurs des cellules et des sous-marins appelés de cellules.
Vous remarquerez que les événements sont toujours des sous-marins, ne fonctionne jamais. Toutefois, dans le MS Access, il peut être utile de créer des fonctions lorsque vous souhaitez utiliser la propriété d'un événement:
Subs peut retourner une valeur ByRef.