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:
-
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.
-
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
-
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)