VBA funktion aus excel heraus aufrufen

Hallo liebe Experten,

ich habe eine Funktion, die ich aus Excel heraus aufrufen will…

fiktives Szenario: ich habe eine Wertetabelle… wenn ein bestimmter Wert (666) eingetagen ist, soll eine messagebox mit „WUAARGH !“ aufgehen (sorry, ist idiotisch, aber da eh bald halloween ist…)

im VBA-editor habe ich folgendes:

Function schrei()
ActiveCell.Offset(0, 1).Select
If Selection.Value = „666“ Then MsgBox = „wuaargh ! the number of the beast !“
End Function

in excel siehts dann so aus

reihe1 reihe2
zeile1 666 777
zeile2 =schrei =schrei

nun kommt bei excel aber nur #name!

wer kann mir weiterhelfen ?

Hallo,

versuchs mal mit =schrei()

MfG, KoHa

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

versuchs mal mit =schrei()

schon versucht, hilft alles nix
hab irgendwo mal was von UDF oder ähnliches gelesen, aber hab leider NULL ahnung, was das ist

Hallo,

ich würde so etwas ein klein wenig anders aufziehen. Gehe mal im VBA-Editor in das Code-Modul der Tabelle die’s betreffen soll und füge das ein:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Value = 666 Then MsgBox „wuaargh ! the number of the beast !“
End Sub

Das sollte jetzt bei jeder Eingabe von 666 in diese Tabelle, egal in welche Zelle, die Messagebox bringen.

Gruß
Daniel

Hallo Daniel,

das beispiel funktioniert, aber leider lässt sich damit mein _eigentliches_ problem nicht lösen

das da (vereinfacht) wäre:
ich habe 2 zeilen mit werten… geben die beiden zahlen in einer spalte addiert 9, soll in der zelle darunter „OK“ stehen, anderenfalls „–“
das ganze soll ohne makro passieren, sondern die prüffunktion automatisch aufgerufen werden.

grob gesagt soll die funtion ungefähr so aussehen:

function neun ()
if activecell.offset(-1,0).value + activecell.offset(-2,0).value = 9 then activecell.value = „OK“ else activecell.value = „–“
end function

in excel soll dann stehen:

Spalte1 Spalte2
Zeile1 5 7
Zeile2 3 2
Zeile3 =neun() =neun()

demzufolge müsste sich für zeile3 die werte – und OK ergeben

danke für die mühe ! wo liegt mein fehler bei der implementierung ?

excel bringt übrigends in den betreffenden feldern #NAME!

Hallo,

mit der Funktion gibt es eigentlich 3 Probleme:

  1. Aufruf
    Wenn du die Funktion in ein Modul der entsprechenden Arbeitsmappe packst, sollte es eigentlich funktionieren. Im Zweifelsfall hilft dir ja der Formelassistent. Einfach auf das „=“ neben der Eingabezeile klicken. In der Dropdownbox links davon „Weitere Funktionen“ wählen, im nächsten Dialog links auf „Benutzerdefiniert“ gehen. Dann sollten rechts alle selbst erstellten Funktionen stehen die du dann ganz einfach mit Doppelklick einfügen kannst.

  2. Zirkelbezug
    Da du versuchst in der Formel die aktive Zelle hart zu ändern, würdest du ja damit die Formel überschreiben und damit den Grund für die Änderung und damit… usw.
    Du musst also das Ergebnis für die aktive Zelle einfach als Rückgabewert der Funktion nehmen, also z.B. so:
    Function neun() As String
    neun = IIf(ActiveCell.Offset(-1, 0).Value + ActiveCell.Offset(-2, 0).Value = 9, „OK“, „–“)
    End Function

  3. Aktualisierung
    Dadurch das du über Offset an die benötigten Werte kommen willst, weiss Excel nicht, wann es das Formelergebnis aktualisieren soll. Einfacher wäre es hier, die Ausgangswerte wie bei allen anderen Excel-Funktionen als Parameter an die Funktion zu übergeben, z.B.
    Function neun(Wert1 As Range, Wert2 As Range) As String
    neun = IIf(Wert1.Value + Wert2.Value = 9, „OK“, „–“)
    End Function
    Der Aufruf erfolgt dann über =neun(A1,A2)