Keine max(x,y) - Funktion in Access
VBA für Access fehlt ein einfaches Max(x,y)
Funktion zu finden, die mathematische maximum von zwei oder mehr Werte. Ich bin daran gewöhnt, dass eine solche Funktion bereits in der Basis-API aus anderen Sprachen wie perl/php/ruby/python etc.
Ich weiß, es kann getan werden: IIf(x > y, x,y)
. Gibt es irgendwelche andere Lösungen?
- Sie könnte die Nutzung der Excel-Funktionen in Access. (Mehr unten.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werde ich zu interpretieren, die Frage zu Lesen:
Wie macht man implementieren Sie eine Funktion in Access, gibt die Min/Max-von einem array von zahlen? Hier ist der code, den ich verwenden (mit der Bezeichnung "iMax" nach Analogie mit der IIf, d.h., "Sofort Wenn"/"Sofort-Max"):
Warum der Zugriff wäre nicht umzusetzen, es ist nicht eine sehr häufige Sache zu brauchen, scheint mir. Es ist nicht sehr "databasy", entweder. Sie habe bereits alle Funktionen, die Sie brauchen für die Suche nach Min/Max-über Domänen und in sets von Zeilen. Es ist auch nicht sehr schwer zu implementieren, oder einfach nur code als one-time-Vergleich, wenn Sie es brauchen.
Vielleicht die oben hilft jemand.
Aufruf von Excel VBA-Funktionen von MS-Access-VBA
Wenn Sie fügen Sie einen Verweis zu Excel (
Tools
→References
→Microsoft Excel x.xx Object Library
), dann können SieWorksheetFunction
zu nennen, die meisten Excel-Arbeitsblattfunktionen, einschließlichMAX
(das kann auch auf arrays).Beispiele:
oder,
Dem ersten Aufruf dauert eine Sekunde, um zu reagieren (eigentlich 1.1 sec für mich), aber nachfolgende Aufrufe sind viel mehr angemessen (<0.002 sec, jeweils für mich).
Bezogen auf Excel als Objekt
Wenn Sie eine Menge von Excel-Funktionen in Ihre Verfahren, Sie kann in der Lage sein, zur weiteren Verbesserung der Leistung durch Verwendung einer
Application
Objekt zu verweisen, die direkt in Excel.Beispielsweise diese Prozedur durchläuft eine Reihe von Datensätzen, die wiederholt mit Excel
MAX
auf ein Byte-Array zu bestimmen, die "höchste" ASCII-Zeichen eines jeden Datensatzes.Weil Sie dachten wahrscheinlich, dass Sie verwenden würden, die DMAX-und DMIN-oder die sql-MAX und nur mit der Datenbank in access?
Ich bin auch neugierig, warum.. Es scheint wie ein overkill zu haben, um eine temp-Tabelle und hinzufügen, Formular Werte in die Tabelle ein und führen Sie dann ein DMAX oder MAX-Abfrage auf die Tabelle, um das Ergebnis zu erhalten...
Habe ich bekannt, um zu erstellen ein kleines projMax () - Funktion, nur um mit diesen umzugehen. Nicht, dass VBA wird wohl noch verbessert werden, aber nur, falls Sie jemals einen richtigen Max und Min) - Funktion, es wird nicht in Konflikt mit meinen Funktionen. BTW, das original-Plakat suggeriert tun IIF... Das funktioniert, aber in meiner Funktion, die ich in der Regel werfen ein paar Nz()'s zu verhindern, dass eine null vom ruinieren der Funktion.
Beide Funktionen haben Probleme mit Null. Ich denke, das wird besser sein.
Ich mochte DGM Verwendung der IIF-Anweisung und David die Verwendung der For/Next-Schleife, also bin ich, kombinieren Sie zusammen.
Da VBA in access nicht über eine strenge Typ-Prüfung, die ich verwenden werde, varients zu bewahren, alle numerische Werte, integer und dezimal, und geben den Wert zurück.
Großes Lob an HansUP für den Fang von mein-parameter-überprüfung 🙂
Kommentare zu code mehr freundlicher.
Der einzige Unterschied zwischen den 2 Funktionen ist die Reihenfolge der vVal und vNumeric in der IIF-Anweisung.
Die for each-Klausel verwendet interne VBA-Logik zu behandeln, die Schleife und überprüfung von array-Grenzen, während "Base-0" beginnt der array-index bei 0.
IsNull(NumericItems)
nieTrue
. Wenn Sie gedacht, um die Funktion zu verlassen, wenn ohne Argumente aufgerufen, versuchen, die Kontrolle fürUBound(NumericItems) = -1
Können Sie tun
Worksheetfunction.max()
oderworksheetfunction.min()
in Access VBA. Hoffe, das hilft.