Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1896to1900
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

Variant Datentyp aus Funktion/Diretk

Variant Datentyp aus Funktion/Diretk
30.08.2022 10:57:08
MCO
Guten Morgen!
Ich hab eine Funktion geschrieben, mit der ich zum Namen die email-Adresse aus einer Tabelle raussuchen und lesen kann.
Tut super.... solang ich die als Funktion im Direktfenster aufrufe:

? MA_Daten2([A39])(6)
liefert die Mailadresse zu einem Namen.
In A39 ist steht der volle Name, 6 ist die 6 Pos im array (email-adresse)
Ich kann auch schon die spezielle Stelle im Code benennen, weiß aber kein workaround...
Alle Mitarbeiter-Daten werden aus der Tabelle in ein Variant gelesen:

Function MA_Daten2(name_voll As String) As Variant
Dim Alldata2 As Variant
Alldata2 = Sheets("MA_Daten").Range("A1").CurrentRegion
Alldata2 ist dann ein Variant/Variant(1 to 96/ 1 to 3) (die Spalten werden später durch Leerfelder ergänzt, das ist kein Fehler)
Ich kann die Daten auswerten und erhalte mein Ergebnis.
Nutze ich die Funktion allerdings im Tabellenblatt

=MA_Daten2(A39)(6)
wird mir nur #WERT! zurückgeliefert, im gleichen Code wie oben die Funktion Alldata2 nur mit 1 Zelle belegt (A1)!
Kann mir jemand sagen, was ich da falsch mache?
Vielen Dank....
Gruß, MCO

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variant Datentyp aus Funktion/Diretk
30.08.2022 11:10:06
Daniel
Hi
Excelformeln kennen die Schreibweise ...(6) nicht. das ist VBA-Sprech.
probier mal in der Excelzelle: =Index(MA_Daten2(A39);6)
Gruß Daniel
AW: Variant Datentyp aus Funktion/Direkt
30.08.2022 11:21:27
MCO
Hallo Daniel!
Auch den Gedanken hab ich schon gehabt, daher hab ich eine weitere Funktion als Aufruf zugefügt.

Public Function Name_detail(Name As String, Detail As Long) As String
Name_detail = MA_Daten2(Name)(Detail)
End Function
Damit müsste mir das auf jeden Fall als String wiedergegeben werden.
Allerdings bleibt das oben von mir beschriebene Problem, dass aus dem Tabellenbereich nur Daten aus 1 Zelle genommen werden.
Noch als Ergänzung:
Rufe ich das aus einer Sub heraus auf , ist alles in Ordnung, aus der Funktion heraus nicht mehr....

Sub test_MA_Abfrage()
Dim empf_1  As Variant
Dim i As Long
Dim Testname As String
Testname = "ostr, fr"
empf_1 = MA_Daten2(Testname)
Debug.Print "______________MA_Daten2___________________"
For i = LBound(empf_1) To UBound(empf_1)
Debug.Print i, empf_1(i)
Next i
End Sub
Danke für´s Miträtseln....
Gruß, MCO
Anzeige
AW: Variant Datentyp aus Funktion/Direkt
30.08.2022 11:30:38
MCO
... ich war sicher, dass ich die Frage offen gelassen hatte......
Für Formeln verbotene Aktion in Funktion?
30.08.2022 11:44:43
Daniel
Hi
es besteht auch die Möglichkeit, dass deine Funktion MA_Daten2 einen VBA-Befehl enthält, der in einer Excelformel nicht zulässig ist.
wenn du so einen Befehl verwendest, funktioniert die Funktion nur in einer VBA-Umgebung (Direktfenster oder in einem Makro), aber nicht in einer Formel in einer Excelzelle.
Da müsstest du mal prüfen, ob das der Fall ist.
Verboten sind beispielsweise alle Aktionen, die in Excel irgendwas verändern, also andere Zellwerte oder Formatierungen. Funktionen in Excelzellen dürfen nur einen Wert zurückgeben und ansonsten keine Außenwirkung haben.
Funktionen innerhalb von VBA können alles, was normale Makros auch können, dort sind sie keine klassischen Funktionen, sondern Makros mit Rückgabewert.
wenn du uns den vollständigen Funktionscode nicht zeigen magst, kannst du mal folgendes testen:
1. setze im Quellcode der Funktion am Anfang einen Haltepunkt
2. gebe die Formel in eine Zelle ein.
3. wenn jetzt die Funktion in VBA im Einzelstepmodus ausgeführt wird, klicke dich aufmerksam durch den Code. Wenn die Bearbeitung plötzlich abbricht, steht an dieser Stelle ein Befehl, der in einer Excelzelle nicht zulässig ist.
Aber du musst aufmerksam sein. Es gibt keine Fehlermeldung, es wird einfach die die Codeausführung im Einzelstep sofort beendet.
Gruß Daniel
Anzeige
AW: Variant Datentyp aus Funktion/Diretk
30.08.2022 11:14:18
Rudi
Hallo,
Ma_Daten2(A39) ist ja ein Array. Das kannst du nicht in einer Zelle ausgeben.
vielleicht hilft =Index(Ma_Daten2(A39);6) ?
Gruß
Rudi
Leider nein, siehe Antwort an Daniel
30.08.2022 11:23:43
MCO
... er hatte die gleiche Idee...
Gruß, MCO
was nicht funktioniert ...
30.08.2022 12:50:20
Rudi
Hallo,
ist die Zuweisung Alldata2=Sheets("MA_Daten").Range("A1").Currentregion
Alldata2 enthält dann nur den Wert aus A1.
Du musst der Funktion den auszuwertenden Bereich mitgeben.
z.B.

Function MA_Daten2(rng As Range, name_voll As String) As Variant
Dim Alldata2, i As Long, j As Integer
Dim MADaten()
Alldata2 = rng.Value
For i = 1 To UBound(Alldata2)
If Join(Array(Alldata2(i, 1), Alldata2(i, 2))) = name_voll Then
ReDim MADaten(1 To UBound(Alldata2, 2))
For j = 1 To UBound(Alldata2, 2)
MADaten(j) = Alldata2(i, j)
Next j
MA_Daten2 = MADaten
Exit For
End If
Next i
End Function
In der Tabelle dann
=Index(MA_Daten2(A2:F100;"Hansi Müller");6)
Gruß
Rudi
Anzeige
AW: was nicht funktioniert ...
30.08.2022 13:20:33
MCO
Danke, Rudi!
Ich probier das morgen mal aus.
Gruß. MCO

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige