Anzeige
Archiv - Navigation
1948to1952
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

Übergabe von String an Funktion aus Tabellenblatt

Übergabe von String an Funktion aus Tabellenblatt
23.10.2023 14:59:43
Stephan1212
Hallo zusammen,

ich ärgere mich schon seit einigen Stunden und hoffe ihr könnt mir helfen!

Ich habe eine relativ einfache Funktion in einem Modul geschrieben, welche einen Wert aus einer anderen Datei ausliest und zurückgibt.
Dafür will ich der Funktion den Ordnerpfad, Dateinamen, Tabsheet und Zelle übergeben:



Option Explicit

Function WertAuslesen(Ordnerpfad As String, Dateiname As String, Tabsheet As String, Zelle As String) As String

WertAuslesen = ExecuteExcel4Macro("'" & Ordnerpfad & "[" & Dateiname & "]" & Tabsheet & "'!" & Range(Zelle).Address(, , xlR1C1))

End Function


Folgender Sub im Modul funktioniert problemlos und liefert den gewünschten Wert zurück:



Sub TestWertAuslesen()

MsgBox WertAuslesen("C:\Users\XXX\OneDrive - XXX\Desktop\", "Mappe2.xlsx", "Tabelle1", "D5")

End Sub


Nun will ich die Funktion aus der Excel-Arbeitsmappe heraus aufrufen, bekomme aber leider imme die #WERT!-Fehlermeldung:



=WertAuslesen("C:\Users\XXX\OneDrive - XXX\Desktop\", "Mappe2.xlsx", "Tabelle1", "D5")


Habt ihr vielleicht eine Idee, woran das liegt? Ich denke, dass ich die Strings falsch an die Funktion übergebe...

Freue mich auf Eure Antworten und schon mal vielen Dank!!

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Übergabe von String an Funktion aus Tabellenblatt
23.10.2023 15:07:10
Oberschlumpf
Hi,

"... in einem Modul geschrieben..." = in ein a) allgemeines Modul oder in eins der b) Klassenmodule? = gehört in a) rein

Schreib mal bitte vor das Function ein PUBLIC - ich meine mich zu erinnern, dass Funktionen, die auch als "Formel" in Excel genutzt werden sollen, als öffentlich, also Public deklariert sein müssen.

Hilfts?

Ciao
Thorsten
AW: Übergabe von String an Funktion aus Tabellenblatt
23.10.2023 15:16:30
Stephan1212
Hi Oberschlumpf,

vielen Dank für die schnelle Antwort! Ein "Public" vor der Funktion hat leider nicht geholfen.
Es muss mit der Übergabe des Strings an die Funktion zu tun haben... Eine andere Funktion, der ich nur Zahlen übergebe, funktioniert problemlos.

Ich weiß leider nicht, ob das Modul ein Klassenmodul oder allgemeines Modul ist - habe mal einen Screenshot von der Struktur angehängt. Ist das Modul an der richtigen Stelle?

Userbild

Danke!
Stephan
Anzeige
AW: Übergabe von String an Funktion aus Tabellenblatt
23.10.2023 15:59:18
onur
UDFs als Formel benutzen geht mit den meisten Methoden (so auch ExecuteExcel4Macro) NICHT.
AW: Übergabe von String an Funktion aus Tabellenblatt
23.10.2023 16:25:53
Stephan1212
Danke für die Antwort!

Gibt es vielleicht eine Alternative, mit der ich die gewünschte Aktion realisieren kann?

Danke!
AW: Übergabe von String an Funktion aus Tabellenblatt
23.10.2023 16:51:26
onur
Verstehe das Problem nicht.
Wenn du schon alle Parameter in die UDF direkt eingibst und nicht als Zellbezüge: Warum schreibst du nicht stattdessen direkt
='C:\Users\XXX\OneDrive - XXX\Desktop\[Mappe2.xlsx]Tabelle1'!$D$5

???
AW: Übergabe von String an Funktion aus Tabellenblatt
23.10.2023 17:14:10
onur
Diesen Umweg über Application.ExecuteExcel4Macro benutzt man nur, damit man die Möglichkeit, Zellen aus geschlossen Dateien auszulesen, auch in VBA benutzen kann, und nur deswegen.
Bei Excelformeln geht das sowieso schon auch so.
Anzeige
AW: Übergabe von String an Funktion aus Tabellenblatt
23.10.2023 17:34:37
Stephan1212
Mein Ziel ist es, den Dateipfad dynamisch aufzubauen. Speicherort und Name der einzelnen Files ändert sich je nach gewünschtem Triebwerk und von denen gibt es ca. 80 Stück. Aus den einzelnen Triebwerksfiles brauche ich immer einen bestimmten Wert in einer bestimmten Zelle, und dieser soll in das Masterfile übertragen werden. Die einzelnen Files sind immer nach Seriennummer des Triebwerks benannt (z.B. 8173R828).

Mit Excel Boardmitteln kann ich - nach meinem Wissen - keine dynamischen Dateipfade erstellen. Deswegen der Umweg über VBA, damit ich nicht 80x im Pfad die Seriennummer des Triebwerks ändern muss.

Hoffe das war halbwegs verständlich- hast du vielleicht eine Idee, wie ich das dynamisch lösen könnte?
Anzeige
AW: Übergabe von String an Funktion aus Tabellenblatt
23.10.2023 18:04:16
onur
Wolltest du die UDF in eine einzige Zelle schreiben oder in mehrere ?
AW: Übergabe von String an Funktion aus Tabellenblatt
23.10.2023 19:21:19
Stephan1212
In mehrere, zur Veranschaulichung:



A1: 892389
A2: 2389892
A3: 28398
...


Darauf basierend soll in der nächsten Spalte der Dateipfad aufgebaut werden (Speicherort der einzelnen Files ist immer gleich):



B1: Verweis auf Z28 im Sheet 892389.xlsx
B2: Verweis auf Z28 im Sheet 2389892.xlsx
B3: Verweis auf Z28 im Sheet 28398.xlsx
...


Danke nochmals für deine Hilfe!
AW: Übergabe von String an Funktion aus Tabellenblatt
23.10.2023 19:36:26
onur
Es geht, aber etwas komplizierter.
Ich brauche eine Beispielsdatei.
Ich muss auf dem Blatt auch Pfad und Zieladresse haben, es sei denn, die ändern sich nie.
Soll das per Knopfdruck erfolgen oder bei Eingabe einer Änderung des Dateinamens bzw Seriennummer?
Anzeige
AW: Übergabe von String an Funktion aus Tabellenblatt
23.10.2023 22:06:05
Stephan1212
Danke für deine Hilfe!

Anbei die Beispieldatei in der auch alle Parameter inkl. Änderungsmöglichkeit sind.
Die Aktualisierung soll bestenfalls bei Eingabe einer Änderung des Dateinamens bzw Seriennummer erfolgen. Per Knopfdruck ist alternativ auch in Ordnung (was auch immer einfacher bzw. wartungsärmer ist).

https://www.herber.de/bbs/user/163672.xlsx

Freue mich auch deine Antwort!

AW: Übergabe von String an Funktion aus Tabellenblatt
24.10.2023 08:04:26
Stephan1212
Danke, das hilft sehr. Per Knopfdruck wird der Code ausgeführt und an den entsprechenden Stellen der Verweis eingefügt, richtig?

Das Grundprinzip habe ich verstanden. Was jedoch jetzt noch etwas Komplexität rein bringt ist, dass es pro Flugzeug ein Tabellenblatt gibt in welchem Werte für beide Engines aus den Engine-Files gezogen werden sollen. Jede Engine hat dabei auch 25 Komponenten. Ich habe mal eine weitere Beispieldatei angehängt - vermutlich muss hier eine Schleife rein, damit die Werte für alle Komponenten gezogen werden.

Wie schaffe ich es, dass jedes Tabellenblatt, das in dieser Form benannt ist "**-*** CALC" vom Code bearbeitet wird - d.h. die Werte für die einzelnen Komponenten beider Engines aus den beiden Engine Files gezogen wird?

Freue mich auf die Antwort und spendiere gerne einen Kaffee via PayPal - hast bereits sehr geholfen!

https://www.herber.de/bbs/user/163679.xlsm
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige