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

Forumthread: Fehlermeldung "Argument ist nicht optional"

Fehlermeldung "Argument ist nicht optional"
30.08.2004 07:22:23
Marcl
Guten Morgen Excelforum,
ich habe einem anderen Forumsbesucher in OfficeForen beim Umschreiben eines Makros geholfen. Allerdings bin nun auch ich mit meinen Kenntnissen (die nicht sehr groß sind) am Ende.
Habe folgenden Makronamen von ihm bekommen:

Sub Daily_DEFECT_update(ByVal Target As Range)
End Sub

Das Ding wollte ich mit einem anderen Makro starten

Sub start()
Call Daily_DEFECT_update
End Sub

nachdem ich das ganze Makro kompilieren wollte, kommt o.g. Fehlermeldung.
Was habe ich falsch gemacht?
Gruß
Marcl
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehlermeldung "Argument ist nicht optional"
Dan
Hallo Marc,
die subrutine "Sub Daily_DEFECT_update(ByVal Target As Range)" erwartet ein Parameter (ByVal Target As Range). Es ist ein Range Object, mit dem dann die Sub arbeitet. Also wenn man die Sub ruft, muss man den Argumet liefern, z.B. so :
dim rngBereich as range
set rngBereich = worksheets(1).usedrange
die sub rufen mit dem Argument rngBereich
call Daily_DEFECT_update(rngBereich)
oder ohne Call - ohne Klammern so :
Daily_DEFECT_update rngBereich
der Parameter Target wird also mit dem usedrange des Worksheets(1) initialisiert
Hats einbischen gelolfen :-) ?
Du kanns noch im Help nachchauen, und woerter wie Call, ByVal, Sub oder so suchen.
Gruss Dan, CZ.
Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Fehlermeldung "Argument ist nicht optional" in Excel VBA lösen


Schritt-für-Schritt-Anleitung

Um die Fehlermeldung "Argument ist nicht optional" in Excel VBA zu beheben, folge diesen Schritten:

  1. Verstehe die Funktion: Die Funktion, die du aufrufst, erwartet mindestens ein Argument. Beispielsweise:

    Sub Daily_DEFECT_update(ByVal Target As Range)
    End Sub
  2. Definiere das Argument: Du musst ein Range-Objekt definieren, das an die Funktion übergeben wird. Zum Beispiel:

    Dim rngBereich As Range
    Set rngBereich = Worksheets(1).UsedRange
  3. Rufe die Funktion korrekt auf: Verwende entweder Call oder rufe die Funktion direkt auf, wie folgt:

    Call Daily_DEFECT_update(rngBereich)

    oder

    Daily_DEFECT_update rngBereich
  4. Kompiliere das Makro: Überprüfe, ob der Fehler weiterhin auftritt. Wenn alles korrekt ist, sollte die Fehlermeldung verschwinden.


Häufige Fehler und Lösungen

  • Fehler: "Argument ist nicht optional": Dieser Fehler tritt auf, wenn du eine Subroutine ohne das erforderliche Argument aufrufst. Stelle sicher, dass du das richtige Argument übergibst.

  • Fehler beim Kompilieren: Überprüfe, ob die Funktion richtig definiert ist und ob alle erforderlichen Parameter korrekt angegeben sind.

  • Parameter nicht optional: Wenn du ByVal oder ByRef verwendest, wird der Parameter als nicht optional betrachtet. Du kannst auch optionale Parameter verwenden, um diesen Fehler zu vermeiden.


Alternative Methoden

Falls du mit optionalen Parametern arbeiten möchtest, kannst du deine Subroutine so definieren:

Sub Daily_DEFECT_update(Optional ByVal Target As Range)
    If Target Is Nothing Then
        Set Target = Worksheets(1).UsedRange
    End If
    ' Weitere Logik hier
End Sub

Hiermit wird ein Range-Objekt nur dann benötigt, wenn es nicht bereits gesetzt ist.


Praktische Beispiele

  1. Einfaches Beispiel mit einem Range-Objekt:

    Sub Test()
       Dim rng As Range
       Set rng = Worksheets(1).Range("A1:A10")
       Daily_DEFECT_update rng
    End Sub
  2. Beispiel mit optionalem Parameter:

    Sub TestOptional()
       Daily_DEFECT_update ' nutzt den Standardwert
    End Sub

In beiden Fällen wird die Fehlermeldung "Argument ist nicht optional" nicht angezeigt, solange die Argumente korrekt übergeben werden.


Tipps für Profis

  • Nutze Option Explicit, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler frühzeitig zu erkennen.
  • Mach dich mit den verschiedenen Möglichkeiten der Parameterübergabe in VBA vertraut: ByVal, ByRef und optionale Parameter.
  • Verwende die VBA-Hilfe, um mehr über die Definition von Subroutinen und Funktionen zu lernen.

FAQ: Häufige Fragen

1. Warum wird die Fehlermeldung "Argument ist nicht optional" angezeigt?
Diese Fehlermeldung wird angezeigt, wenn eine Subroutine aufgerufen wird, ohne die erforderlichen Argumente zu übergeben.

2. Kann ich Parameter in einer Subroutine optional machen?
Ja, du kannst Parameter als optional deklarieren, indem du das Keyword Optional verwendest.

3. Was sind die Unterschiede zwischen ByVal und ByRef?
ByVal übergibt eine Kopie des Wertes, während ByRef eine Referenz auf das Originalobjekt übergibt. Änderungen am Originalobjekt wirken sich also auf die Referenz aus.

4. Wie kann ich herausfinden, welche Parameter eine Funktion benötigt?
Du kannst in der VBA-Hilfe nach der betreffenden Funktion suchen, um die benötigten Parameter und deren Typen zu erfahren.

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