![]() |
Funktion aus DLL in Excel verwenden
Hallo,
ich habe schon oft Werte in eine Excelzelle geschrieben oder gelesen. Jetzt habe ich folgende Frage: Ist möglich in einer Excelzelle eine Funktion aus einer DLL zu verwenden. In der Form von
Code:
Die Funktion TPM$Value steht in einer DLL,
A1=TPM$Value(Parameter...)
die in Excel als AddIn registriert ist. Oder muss hier ein Makro zwischenschalten? |
Re: Funktion aus DLL in Excel verwenden
Hallo Jens,
wenn ich mich richtig erinnere, dann findest du in der Excel Online Help eine Referenz zu VBA (nicht Excel VBA), aus der du die Syntax für DECLARE EXTERNAL FUNCTION ersehen kannst. In der Richtung würde ich bohren. Freundliche Grüße |
Re: Funktion aus DLL in Excel verwenden
Zitat:
Ich habe mit D5 eine DLL gebastelt, die eine Funktion exportiert, die eine zufällige Zahl zurück liefert. In Excel bekomme ich das Dinf nicht eingebunden.
Code:
Die drei Varianten führen nicht zum Ziel.
' Public Declare Function GETVALUE Lib "D:\Delphi5\Test\Excel\Werte_aus_DLL\exdll.dll" () As Integer
' Public Declare Function GETVALUE Lib "exdll.dll" () As Integer Public Declare Function GETVALUE Lib "exdll" () As Integer In die Zelle auf dem Arbeitsblatt schreibe ich: =GetValue. Excel liefert aber nur #NAME anstatt eine Zahl :gruebel: |
Re: Funktion aus DLL in Excel verwenden
Testen kann ich frühestens Dienstag, da ich auf der Maschine vor mir kein MS Office installiert habe.
Inzwischen könntest du deine externe Funktion mit =Call(...) aufrufen - vorausgesetzt du hast CALL() nicht wegkonfiguriert. Freundliche Grüße PS: Hast du den Excel SDK installiert? Dir reicht vielleicht schon die Online Hilfe ![]() Welche Version von Excel verwendest du eigentlich? |
Re: Funktion aus DLL in Excel verwenden
In Drecks-VB ist ein long ein 32Bit Integer.
Wie sieht die Signatur deiner Delphi-Funktion aus? |
Re: Funktion aus DLL in Excel verwenden
Hallo,
ich nutze Excel 2002. Dies ist die DLL
Delphi-Quellcode:
Die DLL liegt im Verzeichnis der Exceldatei.
library exdll;
uses SysUtils, Classes, functions in 'functions.pas'; {$R *.RES} exports GetValue; begin end. unit functions; interface function GetValue : Integer; stdcall; implementation function GetValue : Integer; stdcall; begin Result:=Random(10)+1; end; end. Jetzt habe ich mal probiert eine API Funktion zu importieren
Code:
Bei =GetValue() und = GetCurrentThreadID () wird jetzt #WERT in dei Zelle geschrieben.
Public Declare Function GETVALUE Lib "exdll" () As Long
Public Declare Function GetCurrentThreadID Lib "kernel32" () As Long Function TestValue() As Long TestValue = 5 End Function Wenn in der Zelle =TestValue() steht erscheint wie gewünscht die 5. |
Re: Funktion aus DLL in Excel verwenden
Hallo,
das das Thema für mich immer noch aktuell ist und trotz aller Bemühungen noch keine Lösung gefunden habe möchte ich meine Frage mal puschen. |
Re: Funktion aus DLL in Excel verwenden
Hallo,
es ist mit jetzt aber ziemlich peinlich. Gerade eben noch gepuscht und anschließend die Lösung gefunden. Lösung: Die DLL muss im ..\system32 Verzeichnis liegen :wall: |
Re: Funktion aus DLL in Excel verwenden
Hallo Jens,
grüble auch über diesem Problem einer sauberen Funktionsübergabe. vielleicht kannst Du mir mal einen Auszug über dein Projekt senden. (.dpr, .dll etc.) Wäre dankbar - da es bei mir auch beim Versuch nach deinem Beitrag nicht funktioniert. Gruss Jürgen |
Re: Funktion aus DLL in Excel verwenden
Hallo Jürgen,
nach dem ich die DLL ins system32 geschoben habe läuft es einwandfrei. Dies sind die Funktionen, die die DLL exportiert
Delphi-Quellcode:
Die Paramer sind ausschließlich Strings
function TPMValue1(Year, Partner, Entity, Posnr, Bwa : PChar) : Double; stdcall;
function TPMValue2(Year,Partner, Entity, Posnr : PChar) : Double; stdcall; function TPMValue3(Year, Entity , Posnr : PChar) : Double; stdcall; function TPMValue4(Year, Entity, Posnr, Bwa : PChar) : Double; stdcall; In Excel werden die Funktionen wie folgt importiert.
Code:
Da ich die importierten Funktionen nicht direkt in der Zelle verwenden kann (weiss nicht warum) habe ich mir eine VBA Wrapper-Funktion geschrieben. Geht wie geschmiert.
Public Declare Function TPMValue1 Lib "tpmdirect" (ByVal Year As String, ByVal Partner As String, ByVal Entity As String, ByVal Posnr As String, ByVal Bwa As String) As Double
Public Declare Function TPMValue2 Lib "tpmdirect" (ByVal Year As String, ByVal Partner As String, ByVal Entity As String, ByVal Posnr As String) As Double Public Declare Function TPMValue3 Lib "tpmdirect" (ByVal Year As String, ByVal Entity As String, ByVal Posnr As String) As Double Public Declare Function TPMValue4 Lib "tpmdirect" (ByVal Year As String, ByVal Entity As String, ByVal Posnr As String, ByVal Bwa As String) As Double Function TPM_Value1(ByVal Year As String, ByVal Partner As String, ByVal Entity As String, ByVal Posnr As String, ByVal Bwa As String) As Double TPM_Value1 = TPMValue1(Year, Partner, Entity, Posnr, Bwa) End Function Function TPM_Value2(ByVal Year As String, ByVal Partner As String, ByVal Entity As String, ByVal Posnr As String) As Double TPM_Value2 = TPMValue2(Year, Partner, Entity, Posnr) End Function Function TPM_Value3(ByVal Year As String, ByVal Entity As String, ByVal Posnr As String) As Double TPM_Value3 = TPMValue3(Year, Entity, Posnr) End Function Function TPM_Value4(ByVal Year As String, ByVal Entity As String, ByVal Posnr As String, ByVal Bwa As String) As Double TPM_Value4 = TPMValue4(Year, Entity, Posnr, Bwa) End Function Was mir jetzt noch fehlt ist die Übergabe eines Strings aus der DLL ins Excel. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz