AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Funktion aus DLL in Excel verwenden

Ein Thema von Jens Schumann · begonnen am 26. Aug 2007 · letzter Beitrag vom 9. Sep 2007
Antwort Antwort
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#1

Funktion aus DLL in Excel verwenden

  Alt 26. Aug 2007, 16:59
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:
A1=TPM$Value(Parameter...)
Die Funktion TPM$Value steht in einer DLL,
die in Excel als AddIn registriert ist.
Oder muss hier ein Makro zwischenschalten?
I come from outer space to save the human race
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Funktion aus DLL in Excel verwenden

  Alt 26. Aug 2007, 17:43
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
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Funktion aus DLL in Excel verwenden

  Alt 26. Aug 2007, 19:46
Zitat von marabu:
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.
Ich habe gebohrt. Wahrscheinlich aber immer noch zu dünn .

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:
' 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
Die drei Varianten führen nicht zum Ziel.

In die Zelle auf dem Arbeitsblatt schreibe ich: =GetValue. Excel liefert
aber nur #NAME anstatt eine Zahl
I come from outer space to save the human race
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Funktion aus DLL in Excel verwenden

  Alt 26. Aug 2007, 20:18
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 klick
Welche Version von Excel verwendest du eigentlich?
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Funktion aus DLL in Excel verwenden

  Alt 26. Aug 2007, 20:45
In Drecks-VB ist ein long ein 32Bit Integer.
Wie sieht die Signatur deiner Delphi-Funktion aus?
Robert Giesecke
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Funktion aus DLL in Excel verwenden

  Alt 27. Aug 2007, 09:10
Hallo,
ich nutze Excel 2002.
Dies ist die DLL
Delphi-Quellcode:
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.
Die DLL liegt im Verzeichnis der Exceldatei.

Jetzt habe ich mal probiert eine API Funktion zu importieren
Code:
Public Declare Function GETVALUE Lib "exdll" () As Long
Public Declare Function GetCurrentThreadID Lib "kernel32" () As Long

Function TestValue() As Long
TestValue = 5
End Function
Bei =GetValue() und = GetCurrentThreadID () wird jetzt #WERT in dei Zelle geschrieben.
Wenn in der Zelle =TestValue() steht erscheint wie gewünscht die 5.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Funktion aus DLL in Excel verwenden

  Alt 3. Sep 2007, 11:21
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.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Funktion aus DLL in Excel verwenden

  Alt 3. Sep 2007, 11:28
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
I come from outer space to save the human race
  Mit Zitat antworten Zitat
juergen schmidt

Registriert seit: 8. Sep 2007
Ort: Hennef
1 Beiträge
 
#9

Re: Funktion aus DLL in Excel verwenden

  Alt 8. Sep 2007, 17:49
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
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Funktion aus DLL in Excel verwenden

  Alt 9. Sep 2007, 18:22
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:
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;
Die Paramer sind ausschließlich Strings

In Excel werden die Funktionen wie folgt importiert.
Code:
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
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.

Was mir jetzt noch fehlt ist die Übergabe eines Strings aus der DLL ins Excel.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz