Pas de max(x,y) de la fonction dans l'Accès
VBA pour Access ne dispose pas d'un simple Max(x,y)
fonction pour trouver la mathématique maximum de deux valeurs ou plus. Je suis habitué à avoir une fonction déjà dans l'API de base en provenance d'autres langages tels que perl/php/ruby/python etc.
Je sais qu'il peut être fait: IIf(x > y, x,y)
. Existe-il d'autres solutions?
Vous pouvez utiliser les fonctions Excel dans Access. (Plus ci-dessous.)
OriginalL'auteur DGM | 2009-08-31
Vous devez vous connecter pour publier un commentaire.
Je vais interpréter la question à lire:
Comment implémenter une fonction dans l'Accès qui retourne la valeur Max/Min d'un tableau de nombres? Voici le code que j'utilise (nommé "iMax", par analogie avec l'IIf, c'est à dire, "Si"/"Max"):
Pourquoi l'Accès ne serait pas la mettre en œuvre, ce n'est pas quelque chose de très commun de besoin, me semble. Ce n'est pas très "databasy", soit. Vous avez déjà toutes les fonctions dont vous avez besoin pour trouver des Max/Min à travers le domaine et dans les ensembles de lignes. Il n'est également pas très difficile à mettre en œuvre, ou simplement le code à titre de comparaison, quand vous en avez besoin.
Peut-être les aider quelqu'un.
Je suis surpris qu'il n'a pas obtenir une réponse plus rapidement, compte tenu de la façon triviale du problème. C'est peut-être parce que la question a été conflictuel (c'est à dire, de dénigrer l'Accès), de sorte que les gens qui connaissaient la réponse était trop désactivé afin d'essayer d'aider quelqu'un qui semble avoir quelque chose d'une puce sur son épaule.
Vous FAIRE comprendre pourquoi une base de données outil de développement n'aurait pas une fonction intégrée, droit? Il y a beaucoup plus d'omissions qui sont liés aux bases de données qu'une fonction de ce genre.
Quelqu'un peut-il m'indiquer un plus solution commune qui prend comme arguments de fonction non seulement de tableau de nombres, mais les tableaux et les collections?
OriginalL'auteur David-W-Fenton
Appelant Excel VBA Fonctions à partir de MS Access VBA
Si vous ajouter une référence à Excel (
Tools
→References
→Microsoft Excel x.xx Object Library
) alors vous pouvez utiliserWorksheetFunction
à l'appel de la plupart des fonctions de feuille de calcul Excel, y comprisMAX
(qui peut également être utilisé sur les tableaux).Exemples:
ou,
Le premier appel prend une seconde à répondre (en fait 1.1 sec pour moi), mais les appels suivants sont beaucoup plus raisonnable (<0.002 sec de chaque pour moi).
Se référant à Excel comme un objet
Si vous utilisez beaucoup de fonctions d'Excel dans votre procédure, vous pouvez être en mesure d'améliorer encore plus les performances à l'aide d'un
Application
objet à renvoyer directement à Excel.Par exemple, cette procédure est itérée un ensemble d'enregistrements à plusieurs reprises à l'aide d'Excel
MAX
sur un Tableau d'Octets afin de déterminer le plus "haut" de caractères ASCII de chaque enregistrement.OriginalL'auteur ashleedawg
Car ils ont probablement pensé que vous pouvez utiliser DMAX et DMIN ou sql MAX et travaillant uniquement avec la base de données dans access?
Je suis également curieux de savoir pourquoi.. Sa semble exagéré pour créer un temp-table et ajouter les valeurs d'un formulaire pour la table, puis exécutez une DMAX ou MAX-requête sur la table pour obtenir le résultat...
OriginalL'auteur Stefan
J'ai été connu pour créer un petit projMax() fonction pour traiter ces. Non pas que VBA sera probablement toujours être améliorée, mais seulement dans le cas où elles ne ajouter un Max (et Min) de la fonction, il n'entre pas en conflit avec mes fonctions. BTW, l'affiche originale suggère de le faire IIF... Qui fonctionne, mais dans ma fonction, j'ai l'habitude de jeter un couple de néo-Zélandais()'pour éviter un nul de ruiner la fonction.
OriginalL'auteur Knox
J'ai aimé DGM de l'utilisation de l'instruction IIF et David utilisation de la/la boucle Suivante, je suis donc de les combiner ensemble.
Parce que VBA dans access n'a pas une stricte vérification de type, je vais être en utilisant des variantes de préserver tous les nombres entiers et décimaux, et re-type de la valeur de retour.
Bravo à HansUP pour attraper mon paramètre de vérification 🙂
Commentaires ajoutés afin de rendre le code plus convivial.
La seule différence entre les 2 fonctions est de l'ordre de vVal et vNumeric dans l'instruction IIF.
Pour chaque clause utilise en interne le VBA logique pour gérer la boucle de la matrice et de la vérification de limites, alors que de Base "0" commence à l'index du tableau à 0.
IsNull(NumericItems)
ne sera jamaisTrue
. Si vous quittez la fonction lorsqu'elle est appelée sans arguments, essayez de vérifier pourUBound(NumericItems) = -1
Bon oeil, utilisé vos suggestions sur un échantillon de données et il a travaillé comme annoncée, keep it up!
OriginalL'auteur CoveGeek
Les deux fonctions ont des problèmes avec la valeur Null. Je pense que ce sera mieux.
OriginalL'auteur The Unknown
Vous pouvez faire
Worksheetfunction.max()
ouworksheetfunction.min()
dans Access VBA. Espérons que cette aide.OriginalL'auteur Joe D.