Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA-Code als Funktion: Aufruf aus welcher Zelle?

VBA-Code als Funktion: Aufruf aus welcher Zelle?
29.11.2006 15:55:11
Arthur
Hallo.
Ich habe eine kleine Funktion geschrieben, die ich aus einer Zelle aufrufe. Der Aufruf Funktioniert soweit.
Da die Funktion aus mehreren Zellen aufgerufen werden kann sollte ich wissen von wo der Aufruf gerade stammt.
Beispiel:
Public

Function HellowWorld() as String
HelloWorld = <Zeile> & "-" & <Spalte>
End Function

In den Zellen A1, B3, C5 steht nun =HelloWorld().
Das Ergebnis sollte lauten: 1-1, 3-2, 5-3
Vorbeugend: Natürlich möchte ich nicht die Zelldaten ausgeben, sondern Berechnungen in relativem Bezug durchführen. Das Beispiel sei nur ein Beispiel.
Wer's weiß und mir mitteil kriegt einen Punkt!
Gruß
Art
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA-Code als Funktion: Aufruf aus welcher Zell
29.11.2006 16:08:08
EtoPHG
Hallo Arthur,
Public

Function HelloWorld() As String
HelloWorld = "Zeile:" & Application.Caller.Row & " Spalte:" & Application.Caller.Column
End Function

Gruss Hansueli
Gracias
29.11.2006 16:15:00
Arthur
Vielen Dank, funktioniert wie gewünscht.
AW: VBA-Code als Funktion: Aufruf aus welcher Zelle?
29.11.2006 16:34:47
Luschi
Hallo Arthur,
übergebe doch einfach die Zelle als Parameter!
in Zelle C3: =HellowWorld(C3)
und die Funktion sieht dann so aus:

Function HellowWorld(ByRef xZelle as Range) as String
Application.Volatile
End Function

Allerdings benutze ich solche Funktionen nicht mehr, da sie bei häufigem Vorkommen das Arbeiten im Tabellenblatt sehr verlangsamen.
Man kann das "Application.Volatile" auch weglassen; dann wird diese Funktion aber nicht mehr bei jeder Dateneingabe neu berechnet und auch die F9-Taste hilft da nicht weiter.
Ich schreibe also diese Funktionsaufrufe in einer Sub-Berechnungsroutine, die per CommandButton gestartet wird. Außerdem wird sie bei mir im Ereignis "Speichern" aufgerufen.

Sub neuBerechnung()
Dim ws As Worksheet, rg As Range
Set ws = ThisWorkbook.Worksheets("meineTabelle1")
Set rg = ws.Range("C3")
HellowWorld rg
Set ws = ThisWorkbook.Worksheets("meineTabelle2")
Set rg = ws.Range("C8")
HellowWorld rg
Set rg = Nothing
Set ws = Nothing
End Sub

Gruß von Luschi
aus klein-Paris
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA-Funktion in Excel: Aufruf aus welcher Zelle?


Schritt-für-Schritt-Anleitung

Um eine Excel VBA Funktion in einer Zelle aufzurufen, kannst du die folgende Methode verwenden:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu, indem du mit der rechten Maustaste auf "VBAProject" klickst und dann "Einfügen" > "Modul" wählst.

  3. Kopiere den folgenden Code in das Modul:

    Public Function HelloWorld() As String
       HelloWorld = "Zeile: " & Application.Caller.Row & ", Spalte: " & Application.Caller.Column
    End Function
  4. Schließe den VBA-Editor und gehe zurück zu deinem Excel-Arbeitsblatt.

  5. In einer Zelle kannst du jetzt =HelloWorld() eingeben. Das Ergebnis zeigt die Zeile und Spalte an, von der die Funktion aufgerufen wurde.


Häufige Fehler und Lösungen

Problem: Die Funktion gibt einen Fehler zurück oder zeigt nichts an.

Lösung: Stelle sicher, dass die Funktion korrekt in einem Modul definiert ist und dass du sie mit der richtigen Syntax aufrufst. Verwende =HelloWorld() in der Zelle.

Problem: Die Berechnung erfolgt nicht, wenn du die Daten änderst.

Lösung: Füge Application.Volatile am Anfang deiner Funktion hinzu, um sicherzustellen, dass sie bei jeder Änderung neu berechnet wird.


Alternative Methoden

Eine alternative Methode, um eine VBA-Funktion aufzurufen, ist die Übergabe der Zelle als Parameter. Hier ist ein Beispiel:

  1. Modifiziere die Funktion wie folgt:

    Public Function HelloWorld(ByRef xZelle As Range) As String
       Application.Volatile
       HelloWorld = "Aufgerufen von: " & xZelle.Address
    End Function
  2. In der Zelle C3 kannst du dann =HelloWorld(C3) eingeben.

Diese Methode ist nützlich, wenn du spezifische Zellreferenzen in deiner Berechnung verwenden möchtest.


Praktische Beispiele

Hier sind einige praktische Beispiele für die Verwendung von VBA Funktionen in Excel:

  1. Einfacher Funktionsaufruf:

    • Zelle A1: =HelloWorld()
    • Ergebnis: "Zeile: 1, Spalte: 1"
  2. Funktion mit Zellparameter:

    • Zelle C3: =HelloWorld(C3)
    • Ergebnis: "Aufgerufen von: $C$3"
  3. Größere Berechnungen:

    • Du kannst auch komplexe Berechnungen innerhalb der Funktion durchführen, indem du die Zellreferenzen als Parameter übergibst.

Tipps für Profis

  • Wenn du häufige VBA Funktionsaufrufe in Excel verwendest, überlege, ob du eine Sub-Routine erstellen möchtest, die per Button oder Ereignis gesteuert wird, um die Leistung zu verbessern.

  • Verwende Debug.Print in deiner Funktion, um den Status und die Werte zu überwachen, während du die Funktion testest.

  • Denke daran, dass zu viele volatile Funktionen die Leistung beeinträchtigen können. Überlege, ob du sie nur dann verwendest, wenn es wirklich notwendig ist.


FAQ: Häufige Fragen

1. Wie rufe ich eine VBA-Funktion in einer Zelle auf? Du kannst eine VBA-Funktion in einer Zelle aufrufen, indem du =DeineFunktion() in die Zelle eingibst.

2. Was ist der Unterschied zwischen einer Sub und einer Function in VBA? Eine Function gibt einen Wert zurück, während eine Sub keine Werte zurückgibt, sondern nur Anweisungen ausführt.

3. Kann ich Parameter an eine Excel VBA Funktion übergeben? Ja, du kannst Parameter an eine VBA Funktion übergeben, indem du sie in der Funktionsdefinition definierst und dann beim Aufruf übergibst.

4. Wie mache ich meine Funktion bei jeder Änderung neu berechenbar? Füge Application.Volatile am Anfang deiner Funktion hinzu, um sicherzustellen, dass sie bei jeder Änderung der verknüpften Zellen neu berechnet wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige