Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1560to1564
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

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

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

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige