Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1348to1352
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Function wird via xla nicht in einer anderen Datei

Function wird via xla nicht in einer anderen Datei
21.02.2014 08:08:19
Frank
Guten Morgen an Alle.
Ich habe mir in VBA eine Funktion geschrieben. Diese Funktion liest aus einem Tabellenblatt „Daten“ Daten in ein Array und gibt je nach Eingabeparameter der eigenen Funktion einen entsprechenden Wert in Excel zurück. Soweit so gut – funktioniert super siehe Zelle D36. Nun speichere ich diese Datei als xla ab, um die Funktion in einer anderen Excel Datei nutzen zu können. Wenn ich dort die Funktion aufrufe, dann wird kein Wert zurückgegeben, sondern nur #Wert!~f~. Die xla wurde vorher unter Optinen ~f~-->~f~ AddIns eingebunden. Ist mein Vorhaben nicht möglich oder was mache ich falsch?
Ich habe das Beispiel angefügt. Dieses müsste nun als xla gespeichert und eine neue Datei starten und die xla einbinden…
Anschließend folgende Funktion aufrufen, die in der Ursprungsdatei funktioniert:
~f~=BFKL(“C30/37“;“ec1“)
https://www.herber.de/bbs/user/89375.xlsm
Ich würde mich sehr freuen, wenn mir jemand helfen könnte.
Vielen Dank und viele Grüße
Frank

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: So...
21.02.2014 09:44:30
Frank
Hallo Case,
super vielen Dank das du dir mein Problem angenommen hast. Ich habe mir deine Änderungen angesehen - toll :-). Wenn die Frage erlaubt sei - warum geht denn meine Variante nicht? Ich greife ja auch auf das Datenblatt.
Ich bin aber prinzipiell erst einmal froh dass es möglich ist.
Vielen Dank und viele Grüße
Frank

Mit...
21.02.2014 10:00:14
Case
Hallo Frank, :-)
... "Worksheets("Daten").Range("B5:N32").Value" greifst Du auf die aktuelle Mappe zu - und das ist nicht das Addin. :-)
Also entweder so:
ThisWorkbook.Worksheets("Daten").Range("B5:N32").Value
Oder eben über den Objektnamen:
Tabelle2.Range("B5:N32").Value
Servus
Case

Anzeige
AW: Mit...
21.02.2014 10:17:26
Frank
Hallo Case:-),
vielen Dank für die Erklärung - habe ich nun verstanden.
Ich wünsche dir ein schönes Wochenende.
Viele Grüße
Frank

AW: So...
21.02.2014 10:06:34
EtoPHG
Hallo zusammen,
@Frank: Ich greife ja auch auf das Datenblatt. Nein, du greifst auf Worksheets("Daten") zu. Das ist zwar dein Datenblatt aber nur solange du es nicht als Add-In abspeicherst. Sobald du die Funktion in einer anderen Mappe anwendest, wird in dieser ein Blatt mit dem Namen "Daten" gesucht. Wenn es nicht existiert ergibt das natürlich einen Fehler!
Im übrigen: In einem Add-In Datenblatt schöne Formatierungen vorzunehmen ist nur überflüssige Arbeit und trägt nichts zur Funktion als solches bei. Wenn du in der Zeile 2 die möglichen Parameter als : C fck fckcube fcm....etc. bis Spalte N aufführst, dann nimm diesen Code (inkl. Fehlermeldungen, bei falschen Angaben):
Public Function BFKL(FKL As String, Kennwert As String) As Variant
Dim lRow As Long, lCol As Long
On Error Resume Next
lRow = WorksheetFunction.Match(FKL, Tabelle2.Range("B5:B32"), 0)
lCol = WorksheetFunction.Match(Kennwert, Tabelle2.Range("B2:N2"), 0)
If lRow = 0 Then BFKL = "#Fehler:FKL ungültig"
If Len(BFKL) = 0 And lCol = 0 Then BFKL = "#Fehler:Kennwert falsch"
If Len(BFKL) = 0 Then BFKL = Tabelle1.Cells(lRow + 4, lCol + 1)
End Function
Lösche deine Codes noch aus DieserArbeitsmappe und speichere als Add-In, dass du anschliessend über den Add-In Manager, zur Verfügung normaler Arbeitsmappen, lädst.
Gruess Hansueli

Anzeige
AW: So...
21.02.2014 11:42:16
Frank
Hallo Hansueli,
vielen, vielen Dank für deine Erläuterung und dem Code - sehr genial :o). Ich habe die Formatierung der Tabelle nur erst einmal für mich vorgenommen, da anfänglich noch nicht klar war, dass ich daraus mal eine xla machen würde. Schade, dass man bei einer eingebundenen xla nicht sieht welche Funktionen zur Verfügung stehen. Vielleicht geht das aber doch und ich weiß es nur nicht.
Was mir gerade unklar ist, in deinem Code steht...
lCol = WorksheetFunction.Match(Kennwert, Tabelle2.Range("B2:N2"), 0)
die Kennwerte stehen doch aber in Zeile B3:N3 oder? und trotzdem geht dein Code.
Wenn ich das selbe im Datenblatt mit der Formel:
=VERGLEICH("fck";B3:N3;0)
mache, erhalte ich eine Fehlermeldung...Seltsam.

Anzeige
Ganz einfach mit Vergleichen
21.02.2014 12:29:02
EtoPHG
Hallo Frank,
Mach den Vergleich auf die neue Zeile 2 und du erhälst die Spaltennummer in welcher die entsprechenden Parameterwerte stehen.
lRow und lCol enthalten nach dem Vergleich nur die Zeilen- und die Spaltennummer und darum ergibt dann .Cells(lRow,lCol) die Zelle mit dieser Zeilen/Spalten-Addresse.
Durch diesen Ansatz lässt sich dein Blatt beliebig nach unten und rechts erweitern, das nirgends mehr "absolute Werte" im Code vorkommen.
Gruess Hansueli

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige