Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Argument nicht optional

Forumthread: Argument nicht optional

Argument nicht optional
11.05.2015 09:53:19
Viktoria
Hallo zusammen,
ich glaube ich sehe grade den Wald vor lauter Bäumen nicht mehr, mir geht es eigentlich nur um eine einfach Funktion im Sinne von: wenn eine Zelle einen bestimmten Wert hat, sollen einige Zeilen ausgeblendet werden. Das Makro soll ausgeführt werden sobald das betreffende Tabellenblatt aufgerufen wird.
Jetzt war ich mir das gerade am zusammenbasteln (und ich bin kein Makro-Crack, sondern jemand der schaut, ob es was passendes gibt und pass die dann für meine Zwecke an).
Jetzt bekomme ich immer die Fehlermeldung "Argument ist nicht optional".
Aber die If-Funktion ist doch vollständig? Ich steh grade echt auf dem Schlauch.
Außerdem wird das Makro in der Makro-Liste nicht angezeigt, obwohl es nicht als Private Sub definiert ist - woran kann das noch liegen?
Excel-Version: 2013

Sub Zeilen_ausblenden(ByVal Target As Range)
If Target.Address = "Gehaltsvereinbarung!$D$19" And Target.Value = "x" Then
Rows("19:22").Hidden = True
Else
Rows("19:22").Hidden = False
End If
End Sub

Danke euch schon mal und viele Grüße
Vicky

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Argument nicht optional
11.05.2015 09:58:01
Hajo_Zi
ich bekomme keinen Fehler beim kompletten Code.
Option Explicit
Sub Zeilen_ausblenden(ByVal Target As Range)
If Target.Address = "Gehaltsvereinbarung!$D$19" And Target.Value = "x" Then
Rows("19:22").Hidden = True
Else
Rows("19:22").Hidden = False
End If
End Sub
Sub start()
Zeilen_ausblenden ActiveCell
End Sub

Gruß Hajo

Anzeige
AW: Argument nicht optional
11.05.2015 11:09:34
Viktoria
Hallo Hajo,
danke für die schnelle Antwort.
Das Makro startet bei mir allerdings nicht :-/
Hab's auch mal versucht mit:

Sub Worksheet_Activate()
Call Zeilen_ausblenden
End Sub

Da bekomme ich aber wieder einen Fehler beim Kompiliieren und Argument nicht optional.
Und wenn ich mein Zeilen_ausblenden Sub zum Testen über einen Button anstoße, bekomme ich da auch immer noch den Fehler Argument nicht optional.
Ich bin etwas ratlos gerade?
Grüße
Vicky

Anzeige
AW: Argument nicht optional
11.05.2015 11:34:41
Luschi
Hallo Hajo,
schade, daß Du Deinen geposteten Vba-Code noch immer nicht vorher testest. Denn dann würdest Du feststellen, daß Target.Address im Normalfall immer nur den Zellbezug ohne vorangestellen Tabellennamen zurückgibt.
Will man den Tabellennamen aber mit dazu haben, dann so:
If Target.Parent.Name & "!" & Target.Address = "Gehaltsvereinbarung!$D$19" ... Then
Selbst:
If Target.Address(,,xlA1,True) ... Then
ist nicht korrekt, dann dann würde der Arbeitsmappenname mit im String übergeben werden.
(siehe vba-Hilfe: https://msdn.microsoft.com/de-de/library/office/ff837625(v=office.15).aspx )
Gruß von Luschi
aus Klein-Paris

Anzeige
AW: Argument nicht optional
11.05.2015 16:05:50
Viktoria
Hallo zusammen,
danke für eure Hilfe, jetzt klappt es wunderbar!!
Viele Grüße
Vicky

AW: Argument nicht optional
11.05.2015 10:47:25
Matthias
Hallo
Zitat
Das Makro soll ausgeführt werden sobald das betreffende Tabellenblatt aufgerufen wird.
Code gehört ins entsrechende Tabelleblatt
Option Explicit
Private Sub Worksheet_Activate()
Rows("19:22").Hidden = Range("D19") = "x"
End Sub
https://www.herber.de/bbs/user/97573.xlsm
Gruß Matthias

Anzeige
AW: Argument nicht optional
11.05.2015 11:34:28
Viktoria
Hallo Matthias,
danke, damit funktioniert es! :-)
Wie muss ich den Code verändern, wenn die Zelle, deren Inhalt geprüft werden soll, nicht in dem Arbeitsblatt ist, in dem die Zeilen ausgeblendet werden?
Also wenn im Arbeitsblatt "Gehaltsmodell" eine bestimmte Zelle = "x" ist, sollen sobald man das Blatt "Gehaltsvereinbarung" aufruft, automatisch bestimmte Zeilen ausgeblendet werden.
Danke euch noch mal!
Viele Grüße
Vicky

Anzeige
Worksheets("Gehaltsmodell").Range("B2")
11.05.2015 11:51:32
Matthias
Hallo
Option Explicit
Private Sub Worksheet_Activate()
With Worksheets("Gehaltsmodell").Range("B2")
Rows("19:22").Hidden = .Value = "x"
End With
End Sub
Gruß Matthias
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Fehlerbehebung: "Argument nicht optional" in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.

  2. Füge einen neuen Modul hinzu: Rechtsklicke im Projekt-Explorer auf "VBAProject" und wähle "Einfügen" > "Modul".

  3. Kopiere und füge den folgenden Code ein:

    Sub Zeilen_ausblenden(ByVal Target As Range)
       If Target.Address = "Gehaltsvereinbarung!$D$19" And Target.Value = "x" Then
           Rows("19:22").Hidden = True
       Else
           Rows("19:22").Hidden = False
       End If
    End Sub
  4. Erstelle eine Subroutine zur Aktivierung: Diese wird das Makro beim Wechseln zum Arbeitsblatt ausführen:

    Private Sub Worksheet_Activate()
       Call Zeilen_ausblenden(ActiveCell)
    End Sub
  5. Teste das Makro: Wechsle zu dem Arbeitsblatt, um zu prüfen, ob die Zeilen korrekt ausgeblendet werden.


Häufige Fehler und Lösungen

  • Fehler: "Argument ist nicht optional": Dieser Fehler tritt auf, wenn du ein Argument in einer Subroutine nicht übergibst. Achte darauf, dass du das Target-Objekt korrekt übergibst, z.B. Call Zeilen_ausblenden(ActiveCell).

  • Fehler beim Kompilieren: Wenn du versuchst, das Makro ohne Argument aufzurufen, z.B. Call Zeilen_ausblenden, ohne dass du ein Ziel übergibst, bekommst du den Fehler.

  • Makro wird nicht angezeigt: Stelle sicher, dass deine Subroutine nicht als Private deklariert ist, wenn du sie in der Makroliste sehen möchtest.


Alternative Methoden

  1. Direktes Ausblenden ohne Subroutine: Du kannst den Code direkt in das Worksheet_Activate-Ereignis einfügen, um die Zeilen ohne separate Subroutine auszublenden:

    Private Sub Worksheet_Activate()
       Rows("19:22").Hidden = Range("D19") = "x"
    End Sub
  2. Verwendung von With-Anweisung: Um den Code sauberer zu gestalten, kannst du die With-Anweisung verwenden, wenn du auf eine andere Arbeitsblattzelle zugreifst:

    Private Sub Worksheet_Activate()
       With Worksheets("Gehaltsmodell").Range("B2")
           Rows("19:22").Hidden = .Value = "x"
       End With
    End Sub

Praktische Beispiele

  • Beispiel 1: Wenn die Zelle D19 auf dem Arbeitsblatt "Gehaltsvereinbarung" den Wert x hat, werden die Zeilen 19 bis 22 ausgeblendet.

  • Beispiel 2: Um eine Zelle auf einem anderen Arbeitsblatt zu prüfen, kann Folgendes verwendet werden:

    Private Sub Worksheet_Activate()
       With Worksheets("Gehaltsmodell").Range("B2")
           Rows("19:22").Hidden = .Value = "x"
       End With
    End Sub

Tipps für Profis

  • Verwende Option Explicit: Füge Option Explicit am Anfang deiner Module hinzu, um sicherzustellen, dass alle Variablen deklariert werden. Dies hilft, Fehler zu vermeiden, die durch Tippfehler entstehen können.

  • Fehlermeldungen behandeln: Du kannst On Error verwenden, um Fehler elegant zu behandeln und zu protokollieren.

  • VBA-Parameter optional nutzen: Wenn du möchtest, dass ein Parameter optional ist, kannst du ihn mit Optional definieren. Bedenke jedoch, dass dies den Aufruf deiner Subroutine beeinflussen kann.


FAQ: Häufige Fragen

1. Warum bekomme ich den Fehler "Argument ist nicht optional"? Dieser Fehler tritt auf, wenn du eine Subroutine aufrufst, die ein Argument erwartet, aber kein Argument übergeben wird.

2. Wie kann ich ein Makro so einstellen, dass es beim Öffnen eines bestimmten Arbeitsblatts automatisch ausgeführt wird? Du kannst das Worksheet_Activate-Ereignis nutzen, um den Code auszuführen, wenn das Arbeitsblatt aktiv wird.

3. Kann ich die Sichtbarkeit von Zeilen in einem anderen Arbeitsblatt steuern? Ja, mit dem entsprechenden Verweis auf das andere Arbeitsblatt kannst du die Sichtbarkeit von Zeilen steuern, wie im Beispiel gezeigt.

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