Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makro per Funktion in Zelle ausführen

Makro per Funktion in Zelle ausführen
10.06.2017 14:25:28
Nico
Hallo!
Das Forum hat mir schon viel geholfen beim Einarbeiten in VBA, jetzt bin ich aber an einem Punkt, für den ich keine Lösung gefunden habe:
Ich habe in meiner Excel widerkehrende Textblöcke, die ich gerne per Funktion aufrufen will.
Ich möchte sinngemäß in eine Zelle nur "Modul1" schreiben und über ein Makro wird dann das Modul1 eingefügt. Dafür müssen an dieser Stelle mehrere Zeilen von einem anderen Tabellenblatt, in dem das Modul hinterlegt wird, eingefügt werden.
Den einfachen Code zum kopieren habe ich:

Public Function Modul() As String
Sheets("Module").Rows("4:7").Copy
Sheets("Kalkulation").Select
Rows("8:8").Select
Selection.Insert Shift:=xlDown
End Function

Ich habe testweise die Stelle, an der eingefügt wird, auf Zeil 8 festgelegt.
Wenn ich jetzt aber in einer Zelle in "=Modul()" schreibe, passiert leider nichts.
Gibt es die Möglichkeit, so ein Makro aufzurufen, überhaupt?
Und wenn ja, was muss ich ergänzen, dass es auch an der Stelle, an der ich die Funktion in eine Zeile geschrieben habe, eingefügt wird?
Für andere Lösungen bin ich natürlich auch offen, habe bis jetzt aber nur die Möglichkeit gefunden "Namen zu definieren", womit ich aber nur in eine Zelle schreiben kann.
Vielen Dank schonmal für die Hilfe und viele Grüße
Nico
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Makro per Funktion in Zelle ausführen
10.06.2017 15:23:15
Hajo_Zi
Hallo Nico,

Über wenn Makro starten
Du musst dazu einen Umweg anlegen.
Die WENN-Funktion lautet z.B.
=WENN(A1>10;MakroStart();"Nix")
Die Wenn-Bedingung kann kein Makro starten, aber eine Funktion ausführen. Diese Funktion kann  _
wiederum ein Makro aufrufen.
Die Funktion ist so aufgebaut und ruft das abhängige Makro auf:
Function MakroStart()
Application.Volatile
MakroStart_Makro
End Function
Sub MakroStart_Makro()
MsgBox ("TuT")
End Sub
von Ramses (Rainer)

Sheets("Kalkulation").Rows("8:8").Insert Shift:=xlDown

Anzeige
AW: Makro per Funktion in Zelle ausführen
10.06.2017 16:03:54
Nepumuk
Hallo Nico,
das geht nicht. Eine Funktion die aus einer Zelle aufgerufen wird kann wie eine normale Formel nur die Zelle ändern aus der heraus sie aufgerufen wurde. Was du willst geht nur per Event-Prozedur die auf das ändern einer Zelle reagiert. Ein grob vereinfachtes Beispiel:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Value = "Modul" Then
        Worksheets("Module").Rows("4:7").Copy
        Worksheets("Kalkulation").Rows(8).Insert Shift:=xlDown
    End If
End Sub

Der Code muss in das Modul der Tabelle in der du in eine Zelle "Modul" schreibst.
Gruß
Nepumuk
Anzeige
AW: Makro per Funktion in Zelle ausführen
12.06.2017 13:36:47
Nico
Super, Vielen Dank Nepumuk, damit funktioniert es grundsätzlich schonmal so, wie ich es mir vorstelle.
Allerdings bekomme ich mit folgendem Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value = "Modul" Then
Worksheets("Module").Rows("4:7").Copy
Worksheets("Kalkulation").Rows(Target.Row + 1).Insert Shift:=xlDown
End If
End Sub
einen Laufzeitfehler '13': Typen unverträglich.
beim Debuggen zeigt er mir als Ursache die "If Target.Value..." Zeile an.
Weißt du, woran das liegt und wie ich es beheben kann?
Hatte überlegt, Target As String zu definieren und dann nur "If Target = "Modul" abzufragen, aber das funktioniert leider auch nicht.
Gruß Nico
Anzeige
AW: Makro per Funktion in Zelle ausführen
12.06.2017 14:03:42
Nepumuk
Hallo Nico,
dann teste mal das:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count = 1 Then
        If Target.Value = "Modul" Then
            Application.EnableEvents = False
            Worksheets("Module").Rows("4:7").Copy
            Worksheets("Kalkulation").Rows(8).Insert Shift:=xlDown
            Application.EnableEvents = True
        End If
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: Makro per Funktion in Zelle ausführen
12.06.2017 14:21:01
Nico
Hi,
Danke, damit funktioniert das Einfügen des Moduls. Ich habe noch ergänzt, dass die Zeile, in der ich "Modul" schreibe, gelöscht wird, sodass "Modul" quasi durch das komplette Modul ersetzt wird.
Das funktioniert auch.
Allerdings bekommme ich jetzt den gleichen Laufzeitfehler, wenn ich in dem Tabellenblatt manuell Zeilen lösche oder hinzufüge.
Ich muss vielleicht noch ein bisschen mehr beschreiben, wofür ich das überhaupt brauche:
Mit der Excel als Vorlage kalkulieren andere bestimmte Vorgänge, in dem sie verschiedene Schritte nacheinander auflisten. Darunter sind auch immer widerkehrende, was ich durch die Module vereinfachen möchte.
Der Nutzer soll also nur "ModulX" schreiben müssen, und der ganze Block mit mehreren Zeilen wird eingefügt.
Dafür darf natürlich außer der Aktion, wenn "ModulX" geschrieben wird, nichts anderes in der Excel passieren, da die Nutzer keinen Kontakt mit VBA haben (sollen).
Vielen Dank für deine Hilfe,
Nico
Anzeige
AW: Makro per Funktion in Zelle ausführen
12.06.2017 16:05:34
Nepumuk
Hallo,
kann ich nicht nachvollziehen. Zeig mal deine Ergänzung.
Gruß
Nepumuk
AW: Makro per Funktion in Zelle ausführen
12.06.2017 16:37:42
Nico
Hi,
habe es inzwischen so gelöst:
Option Explicit
Dim tRng As Range, _
oRng As String, _
tRow As Long
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ende
If Target.Value = "Fragenkatalog" Then
Application.EnableEvents = False
Worksheets("Module").Rows("3:6").Copy
Worksheets("Kalkulation").Rows(Target.Row + 1).Insert Shift:=xlDown
Rows(Target.Row).Delete
Application.EnableEvents = True
Exit Sub
End If
ende:
End Sub
und zusätzlich:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set tRng = ActiveCell
oRng = Selection.Address(0, 0)
tRow = tRng.Row
End Sub
habe diese Lösung in einem anderen Forum gefunden.
Ich weiß zwar nicht, was ich damit jetzt alles an Fehlermeldungen umgehe, beim ausprobieren hatte ich aber jetzt keine Probleme mehr.
Anzeige
Abgesehen mal davon, dass eine aus einer ...
10.06.2017 16:53:05
Luc:-?
…ZellFml heraus aufgerufene Fkt (UDF) unter bestimmten Umständen auch auf eine ganz andere Zelle als ihre StandortZelle wirken kann, Nico,
scheint mir das hier doch eher ein simpler Fall von Ausgabe mehrerer Werte zu sein. Falls du nun tatsächlich nicht nur in eine, son­dern mehrere Zellen schreiben willst, muss auch entsprd viel Platz (leere Zellen) vorhanden sein. Dann ist es aber nicht sinnvoll, in der UDF .Copy zu benutzen, sondern man sollte ein Datenfeld (Array) über den StandortBereich des TextModuls anlegen → jede (Text-)Zeile als eigenes Element des Datenfelds. Das könnte man dann per (Zell-)MatrixFml auch auf die FmlZelle nebst einer entsprd Anzahl von FolgeZellen übertragen. Man könnte aber auch zusätzlich INDEX benutzen (oder so etwas mit in die UDF einbauen) und dann zellweise TextZeilen übernehmen. Allerdings muss man dafür keine UDF schreiben, sondern kann das auch ganz einfach mit StandardFktt in ZellFmln erledigen.
Gruß, Luc :-?
Besser informiert mit …
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Makro in Excel über eine Funktion in der Zelle aufrufen


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Modul erstellen: Klicke mit der rechten Maustaste auf VBAProject (DeineArbeitsmappe), gehe zu Einfügen und wähle Modul.

  3. Funktion schreiben: Füge folgenden Code in das Modul ein:

    Public Function Modul() As String
        Application.Volatile True
        Sheets("Module").Rows("4:7").Copy
        Sheets("Kalkulation").Rows(8).Insert Shift:=xlDown
    End Function
  4. Worksheet-Change-Ereignis hinzufügen: Gehe zu dem Arbeitsblatt, in dem du die Funktion aufrufen möchtest, und füge diesen Code in das entsprechende Modul ein:

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Count = 1 Then
            If Target.Value = "Modul" Then
                Application.EnableEvents = False
                Worksheets("Module").Rows("4:7").Copy
                Worksheets("Kalkulation").Rows(Target.Row + 1).Insert Shift:=xlDown
                Target.Delete
                Application.EnableEvents = True
            End If
        End If
    End Sub
  5. Funktion in Zelle aufrufen: Schreibe in eine Zelle =Modul() und drücke Enter.


Häufige Fehler und Lösungen

  • Laufzeitfehler '13': Typen unverträglich: Dieser Fehler tritt auf, wenn der Target.Value nicht wie erwartet ist. Stelle sicher, dass du nur mit einer Zelle arbeitest, indem du die If Target.Count = 1 Then Bedingung verwendest.

  • Funktion wird nicht ausgeführt: Überprüfe, ob Application.EnableEvents auf True gesetzt ist, nachdem dein Makro ausgeführt wurde. Wenn es auf False bleibt, reagiert Excel nicht mehr auf Änderungen.


Alternative Methoden

Eine andere Möglichkeit ist die Verwendung von Datenfeldern (Arrays), um mehrere Werte auf einmal einzufügen. Dabei kannst du die Excel-Funktionen nutzen, um Daten effizient zu übertragen:

Sub InsertArray()
    Dim myArray As Variant
    myArray = Worksheets("Module").Range("A1:A4").Value
    Worksheets("Kalkulation").Range("B1:B4").Value = myArray
End Sub

Praktische Beispiele

  • Wiederkehrende Textblöcke: Erstelle mehrere Module in einem Arbeitsblatt und rufe sie über die Funktion auf, indem du den Namen des Moduls in die entsprechende Zelle eingibst.
  • Kombination von Formeln: Du kannst auch Excel-Formeln verwenden, um Berechnungen zu machen, bevor du die Daten in die Zielzelle einfügst.

Tipps für Profis

  • Optimierung mit Application.Volatile: Verwende Application.Volatile True, um sicherzustellen, dass die Funktion bei jeder Änderung neu berechnet wird. Dies kann die Leistung bei großen Datenmengen beeinträchtigen, also nutze es mit Bedacht.
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um unerwartete Probleme elegant zu lösen. Beispielsweise kannst du On Error GoTo verwenden, um Fehler an einer bestimmten Stelle zu behandeln.

FAQ: Häufige Fragen

1. Kann ich mehrere Zellen gleichzeitig bearbeiten?
Ja, du kannst ein Array verwenden, um mehrere Zellen gleichzeitig mit Werten zu befüllen.

2. Warum funktioniert meine Funktion nicht?
Überprüfe, ob das Makro aktiviert ist und ob die Namen der Arbeitsblätter korrekt sind. Zudem darf Application.EnableEvents nicht auf False gesetzt bleiben.

3. Was ist der Unterschied zwischen VBA und Excel-Formeln?
VBA bietet mehr Flexibilität und Kontrolle, während Excel-Formeln schneller für einfache Berechnungen und Datenanalysen verwendet werden können.

4. Wie kann ich ein Makro in einer Zelle ausführen?
Direktes Ausführen eines Makros in einer Zelle ist nicht möglich. Du kannst jedoch über das Worksheet_Change-Ereignis auf Änderungen in Zellen reagieren.

Mit diesen Anleitungen und Tipps kannst du effektiv Makros in Excel nutzen und deine Arbeitsabläufe optimieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige