2016-08-31 7 views
0

Ich habe eine Schaltfläche, die, wenn gedrückt, ruft einige Makros durchgeführt werden. Alle meine Makros laufen gut mit Ausnahme des Makros "AddDropDown". Es hält mich einen Fehler, der sagt "Compile Error: Argument nicht optional (Fehler 449)".Kompilierfehler: Argument nicht optional Fehler, wenn ich Makro von anderen Makro aufrufen

Diese laufen gut, wenn ich manuell nur sie auswähle und auf Ausführen klicke.

Die Hilfeseite sagt "Die Anzahl und Arten der Argumente müssen mit den erwarteten übereinstimmen. Dieser Fehler hat die folgenden Ursachen und Lösungen: ? Falsche Anzahl von Argumenten. Liefern Sie alle notwendigen Argumente. Zum Beispiel benötigt die linke Funktion zwei Argumente; der erste repräsentiert die Zeichenfolge, die bearbeitet wird, und der zweite gibt die Anzahl der Zeichen an, die von der linken Seite der Zeichenfolge zurückgegeben werden sollen. Da keines der Argumente optional ist, müssen beide angegeben werden. • Ausgelassenes Argument ist nicht optional. Ein Argument kann nur bei einem Aufruf einer benutzerdefinierten Prozedur weggelassen werden, wenn es in der Prozedurdeklaration als Optional deklariert wurde. Entweder liefern das Argument in dem Aufruf oder erklären den Parameter Optional in der Definition „

Mein Code ist so etwas wie folgt aus:.

Private Sub Button_Click() 
     Macro1 
     Macro2 
     AddDropDowns 
     AddDropDown 
     Macro3 
    End Sub 

und das Makro, das den Fehler gibt, ist derjenige unter:

Sub AddDropDowns() 
Dim cell As Range 
Dim iDropDown As Long 

With Worksheets("SourceSheet") 
    For Each cell In .Range("B13", .Cells(13,  .Columns.Count).End(xlToLeft)).SpecialCells(XlCellType.xlCellTypeConstants) 
     AddDropDownEnroll Worksheets("DropDownsSheet"), iDropDown, cell.Offset(-1).Value, "='" & .Name & "'!" & cell.Resize(WorksheetFunction.CountA(cell.EntireColumn) - 1).Address 
    Next cell 
End With 
End Sub 


Sub AddDropDown(sht As Worksheet, dropDownCounter As Long, header As String, validationFormula As String) 
With sht.Range("A1").Offset(, dropDownCounter) '<--| reference passed sheet row 1 passed column 
    .Cells(1, 1) = header '<--| write header 
    With .Cells(2, 1).Validation '<--| reference 'Validation' property of cell 1 row below currently referenced one 
     .Delete    
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=validationFormula 
     .IgnoreBlank = True 
     .InCellDropdown = True 
     .InputTitle = "" 
     .ErrorTitle = "" 
     .InputMessage = "" 
     .ErrorMessage = "" 
     .ShowInput = True 
     .ShowError = True 
    End With 
End With 
dropDownCounter = dropDownCounter + 1 
End Sub 
+1

Sie lesen Sie den Code Sie/einfügen kopieren? Sie rufen 'AddDropDown' ohne Argumente auf, und es ist klar geschrieben, dass 4 (ein Arbeitsblatt, ein langes und zwei Strings) erforderlich ist. –

+1

Ja, die Hilfeseite ist genau richtig. 'Die Anzahl und Typen von Argumenten müssen mit den erwarteten übereinstimmen.Sie haben es ohne Parameter aufgerufen (' AddDropDown') und erwartet 4 Werte ('Sub AddDropDown (siehe Arbeitsblatt, DropDownCounter als Long, Header als String, ValidationFormula) Als String) '). – YowE3K

Antwort

2

In Sub Button_Click() ändern:

Private Sub Button_Click() 
    Macro1 
    Macro2 
    AddDropDowns 
    AddDropDown 
    Macro3 
End Sub 

in:

Private Sub Button_Click() 
    Macro1 
    Macro2 
    AddDropDowns 
    Macro3 
End Sub 

In AddDropDowns() ändern:

AddDropDownEnroll Worksheets("DropDownsSheet"), iDropDown, cell.Offset(-1).Value, "='" & .Name & "'!" & cell.Resize(WorksheetFunction.CountA(cell.EntireColumn) - 1).Address 

in:

AddDropDown Worksheets("DropDownsSheet"), iDropDown, cell.Offset(-1).Value, "='" & .Name & "'!" & cell.Resize(WorksheetFunction.CountA(cell.EntireColumn) - 1).Address 
+1

Würde der _brave_ downvoter auftauchen und irgendeine Erklärung geben, um beide Leute wissen zu lassen, warum sie dieser Antwort nicht folgen sollten und mir beibringen, wie man sie verbessert? – user3598756