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

Forumthread: Sub in einer If-Anweisung aufrufen

Sub in einer If-Anweisung aufrufen
26.10.2016 09:17:52
Thoomas
Guten Morgen zusammen,
wie kann ich denn in einer If-Abfrage wenn eine Bedingung erfüllt wurde ein weiteres Makro aufrufen. Ich habe ein ganzes Makro erstellt und das soll nun checken ob in einem Sheet Inhalt stehtoder nicht. Falls ja, dann soll er das eine Makro aufrufen welches die Sheets leert, falls nicht soll er das "normale" Programm aufrufen. Sieht momentan so aus bei mir:
Sub Start()
If Worksheets("Tabelle1").Range("A1").Value = "" Then Call main
Else:
Call ClearSheets
Call main
End Sub

Danke schonmal und Gruß
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sub in einer If-Anweisung aufrufen
26.10.2016 09:27:03
Daniel
Hi
wenn du nach dem THEN weiterschreibst, musst du den kompletten IF-Block incl dem ELSE-Teil in eine Programmzeile packen.
Übersichtlicher ist, nach Then eine neue Zeile zu beginnen.
Sub Start()
If Worksheets("Tabelle1").Range("A1").Value = "" Then
Call main
Else
Call ClearSheets
Call main
End IF
End Sub
wobei man das auch kürzer schreiben könnte:
Sub Start()
If Worksheets("Tabelle1").Range("A1").Value  "" then Call ClearSheets
Call main
End Sub
Gruß Daniel
Anzeige
AW: Sub in einer If-Anweisung aufrufen
26.10.2016 09:36:55
Thoomas
Hi Daniel,
danke für die fixe Antwort, jedoch gibt es da immer noch ein Problem. Fehlermeldung hier:
Fehler beim Kompilieren: Variable oder Prozedur anstelle eines Moduls erwartet
Der Fehler markiert dann das Makro nach der THEN Anweisung. Das Problem hatte ich leider vorher auch :-/.
Gruß Thomas
Anzeige
AW: Sub in einer If-Anweisung aufrufen
26.10.2016 09:55:35
Daniel
Hi
naja, die Fehlermeldung ist hier doch ziemlich aussagekräftig.
du musst mit Call ein Makro aufrufen, du rufst hier aber ein Modul auf (also im Prinzip das Blatt, wo die Makros abgelegt sind).
das liegt daran, dass du nicht nur das Makro, sondern auch das Modul mit "main" benannt hast.
du hast wahrscheinlich nicht nur das Makro mit "main" benannt, sondern auch das Modul in welchem es liegt.
Entweder benennst du Makro oder Modul um, so dass sich die Namen unterscheiden, oder du rufst dein Makro mit Call Modulname.Makroname auf, denn Call main.main funktioniert wieder, weil dann klar ist was Modul- und was Makroname ist.
Grundsätzlich ist es so, da dass bei Call Name der Interpreter zuersteinmal die Module nach diesem Namen durchsucht. Erst wenn er kein passendes Modul findet, durchsucht er die Makros nach einem Makro mit diesem Namen. Findet er jedoch ein Modul mit diesem Namen, verwendet er das Modul und das verusacht dann den Fehler.
Gruß Daniel
Anzeige
AW: Sub in einer If-Anweisung aufrufen
26.10.2016 10:02:21
Thoomas
Hi,
wow funktioniert nun Einwandfrei! War genau das was du sagtest, hatte meine Module sowie Makros gleich benannt. Wohl ein grober Anfängerfehler, aber wieder was Neues gelernt.
Danke dir vielmals! Super Kompetent der Herr :)
Gruß Thomas

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Sub in einer If-Anweisung aufrufen


Schritt-für-Schritt-Anleitung

Um ein Excel-Makro innerhalb einer If-Anweisung aufzurufen, kannst du folgendes VBA-Skript verwenden. Dies ermöglicht es dir, basierend auf einer Bedingung verschiedene Makros auszuführen:

Sub Start()
    If Worksheets("Tabelle1").Range("A1").Value = "" Then
        Call main
    Else
        Call ClearSheets
        Call main
    End If
End Sub

Achte darauf, dass main und ClearSheets korrekt definierte Excel-Subroutinen sind. Diese Struktur verwendet die If-Anweisung um zu entscheiden, welches Makro aufgerufen wird.


Häufige Fehler und Lösungen

Ein häufiger Fehler, den du möglicherweise erhältst, ist die Meldung: "Variable oder Prozedur anstelle eines Moduls erwartet." Dieser Fehler tritt auf, wenn der Name eines Makros identisch mit dem eines Moduls ist. Hier sind die Schritte, um dieses Problem zu beheben:

  1. Stelle sicher, dass die Namen deiner Makros und Module unterschiedlich sind.
  2. Wenn die Namen gleich sind, benenne entweder das Modul um oder rufe das Makro mit Call Modulname.Makroname auf.

Beispiel:

Call Modulname.main

Alternative Methoden

Wenn du eine kürzere Syntax bevorzugst, kannst du die If-Anweisung ohne das Else-Keyword verwenden:

Sub Start()
    If Worksheets("Tabelle1").Range("A1").Value = "" Then Call main
    Call ClearSheets
End Sub

Diese Methode ist besonders nützlich, wenn du nur eine einfache Bedingung überprüfen möchtest.


Praktische Beispiele

Hier sind einige praktische Beispiele für die Verwendung von If-Anweisungen in VBA:

  1. Aufruf eines Makros, wenn ein bestimmter Wert in einer Zelle steht:
Sub CheckValue()
    If Worksheets("Tabelle1").Range("B1").Value = "Ja" Then
        Call ActionMacro
    End If
End Sub
  1. Verwendung einer If-Schleife, um mehrere Bedingungen zu überprüfen:
Sub MultiCheck()
    If Worksheets("Tabelle1").Range("A1").Value = "" Then
        Call ClearSheets
    ElseIf Worksheets("Tabelle1").Range("A1").Value = "Bedingung" Then
        Call AnotherMacro
    End If
End Sub

Tipps für Profis

  • Verwende aussagekräftige Namen für deine Subroutinen, um Verwirrung zu vermeiden.
  • Dokumentiere deinen Code mit Kommentaren, gerade bei komplexen If-Anweisungen, um die Lesbarkeit zu erhöhen.
  • Teste deine Makros regelmäßig, um sicherzustellen, dass alle Bedingungen korrekt funktionieren und keine unerwarteten Fehler auftreten.

FAQ: Häufige Fragen

1. Wie kann ich ein Makro in einer If-Anweisung aufrufen?
Du kannst das Makro einfach mit Call Makroname innerhalb des If-Blocks aufrufen, wie im Beispiel oben gezeigt.

2. Was bedeutet die Fehlermeldung "Variable oder Prozedur anstelle eines Moduls erwartet"?
Dieser Fehler weist darauf hin, dass der Name deines Makros mit dem Namen eines Moduls identisch ist. Ändere einen der Namen, um den Konflikt zu lösen.

3. Kann ich mehrere If-Anweisungen in einem Makro kombinieren?
Ja, du kannst mehrere If-Anweisungen verwenden, um verschiedene Bedingungen zu überprüfen, entweder mit ElseIf oder mit separaten If-Anweisungen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige