Hallo Access-Spezialisten,
ich benötige die beiden Excel-Funktionen "STANDNORMVERT" und "STANDNORMINV" in einer Access SQL-Abfrage. Hat einer von Euch vielleicht eine Idee, wie dies funktionieren könnte.
Bereits jetzt schon vielen Dank für Eure Antworten. Gruß Elie
Hallo,
mögliche Lösung:
1) Einen Verweis auf Excel.exe im VBA-Editor erzeugen
2) eine Public-Funktion in einem Standardmodul erstellen und darin der VBA-Funktion das Ergebnis der Excel-Funktion zuweisen:
Beispielhaft:
Sub ftkUseFunktion (A,B,C)
ftkUseFunktion = Excel.Application.ExcelFunktion(A,B,C)
End Sub
Diese VBA-Funktion wiederum kannst Du in einer Abfrage aufrufen.
... Leider erhalte ich bei Verwendung dieses Codes:
Public Function Standnormvert(z As Double)
Standnormvert = Excel.Application.ExcelFunktion(z)
End Function
Und Verwendung von z.B. "(STANDNORMVERT(1.33333)) as Test" im Rahmen einer SQL-Abfrage stets einen Laufzeitfehler 438 "Objekt unterstützt die Eigenschaft oder Methode nicht".
Könnte mir vielleicht nochmals jemand weiterhelfen. Vielen herzlichen Dank! Gruß Elie
... könnte es evtl. mit diesem Code klappen? Bei mir bislang ebenfalls ohne Erfolg!
Public Function Standnormvert(z As Double)
Dim xl As Object
Set xl = CreateObject("Excel.Application")
Standnormvert = xl.WorksheetFunction.Standnormvert(z)
Set xl = Nothing
End Function
Gruß Elie
Hallo,
Antwort: NEIN :-\
du kannst nicht den Funktionsnamen (Formelnamen) aus dem Excel-Funktionspool benutzen sondern musst da VBA-Äquivalent dazu nehmen. ;)
wenn du den Objektexplorer im VBE öffnest findest du unter den Excel-Biblkiotheken auch die von dir bereits angerissene Bibliothek der WorkSheetFunctions
Hier musst du dir dann die heraussuchen, die für deine Lösung zutreffend ist.
Nach einer kurzen Googelei... 8)
Ergebnis = Excel.Application.WorksheetFunction.NormSDist(z)
also in deinem Fall dann in Etwa so....
Public Function Standnormvert(z As Double)as Double
Dim xl As Object
Set xl = CreateObject("Excel.Application")
Standnormvert = xl.WorksheetFunction.NormSDist(z)
Set xl = Nothing
End Function
für den Aufruf in einer Abfrage sollte auch das genügen:
(Verweis auf die Ms Excel xxx Library vorausgesetzt)
Public Function Standnormvert(z As Double)
Standnormvert = Excel.Application.WorksheetFunction.NormSDist(z)
End Function
Quelle:
http://rz-home.de/~drhubrich/pdf/VBAED.pdf (http://rz-home.de/~drhubrich/pdf/VBAED.pdf)
p.s. du findest deine Funktionen auf Seite III rechts!
HTH
Hallo,
hat alles super geklappt. Kann jetzt mit Hilfe der Excel-Funktionen sämtliche Werte berechnen. Auf dem Bildschirm wird auch das Ergebnis angezeigt. Wenn ich allerdings das ganze sortieren möchte, rechnet sich das Programm zu Tode;-))
Nochmals vielen herzlichen Dank für Eure Hilfe. Gruß Elie
Hallo,
erstmal freut es mich, dass es geklappt hat, dann ...
ZitatWenn ich allerdings das ganze sortieren möchte, rechnet sich das Programm zu Tode
solltest du nicht die Ergebnisse sortieren sondern die Ausgangswerte.
Wenn die aufsteigend oder absteigend vorsortiert werden, rechnet das Programm bestimmt ;)nicht länger als bei unsortierter Liste.
Wenn deine Frage somit beantwortet ist und das Thema keine weitere Bearbeitung verlangt bitte das Thema in deinem ERSTEN Beitrag auf 'gelöst' setzen - DANKE