Argument niet optioneel

Status
Niet open voor verdere reacties.

Mateus

Gebruiker
Lid geworden
11 aug 2017
Berichten
9
Hallo,
ik heb onderstaand simpele macro die de melding geeft:

"het argument is niet optioneel"

ik zie niet zo wat er hier niet goed in is: help?

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 And Target.Count = 1 Then _
If Target <> "" Then _
Target.Offset(0, 2) = Date
If Target.Column = 5 And Target.Count = 1 Then _
If Target <> "" Then _
Target.Offset(0, 5) = Date
End If
End Sub
 
Die hele constructie klopt niks van:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 3 And Target.Count = 1 Then
        If Target <> "" Then Target.Offset(0, 2) = Date
        If Target.Column = 5 And Target.Count = 1 Then
            If Target <> "" Then Target.Offset(0, 5) = Date
        End If
    End If
End Sub
 
Dank je wel voor de snelle reactie, maar dan krijg ik nog steeds dezelfde melding Argument niet optioneel?
 
Je vertelt er ook niet bij wat je met die functie doet. Die functie wordt uitgevoerd als er een wijziging is in 1 van de cellen op het blad waar deze functie achter hangt. Het argument wordt door Excel zelf meegegeven en kan dus nooit afwezig zijn. De functie zoals ik hem ik #2 plaatste werkt prima.
 
Laatst bewerkt:
ok edmoor,
Ik wil dat als je in de kolommen 3 en 8 iets invult, er 2 en 5 kolommen verder de datum wordt neergezet.
 
Zo dan?
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Column = 3 Or Target.Column = 8 And Target.Count = 1 Then Target.Offset(, 2 + (Target.Column = 8) * -3) = IIf(Target = "", "", Date)
End Sub
 
ok edmoor,
Ik wil dat als je in de kolommen 3 en 8 iets invult, er 2 en 5 kolommen verder de datum wordt neergezet.

Maar waar heb je die functie gezet, dat was eigenlijk mijn vraag.
 
Geen foutmeldingen als je twee cellen onder elkaar selecteert en op delete drukt.
Het staat misschien leuk zo'n oneliner maar wees niet bang voor een regeltje meer.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 Application.EnableEvents = False
  If Target.Column = 3 Or Target.Column = 8 Then
    If Target.Count > 1 Then
       Target.Offset(, Target.Column \ 2 + 1).ClearContents
     Else
       Target.Offset(, Target.Column \ 2 + 1) = IIf(Target = "", "", Date)
    End If
  End If
 Application.EnableEvents = True
End Sub

Als je met multiselect wilt invoeren (Ctrl+Enter) of leegmaken, de iets minder fraaie code qua schrijfwijze.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 Application.EnableEvents = False
  If Target.Column = 3 Or Target.Column = 8 Then
    If Target.Count > 1 Then
       Selection.Offset(, Target.Column \ 2 + 1) = IIf(ActiveCell <> "", Date, "")
     Else
       Target.Offset(, Target.Column \ 2 + 1) = IIf(Target = "", "", Date)
    End If
  End If
 Application.EnableEvents = True
End Sub
 
Laatst bewerkt:
Hallo,

ik weet niet wat in verkeerd doe, maar ik copy/paste bovenstaand in VBAProject en krijg nog steeds argument niet optioneel??
 
Vandaar mijn vraag in #7.
 
Je hebt een Worksheet_Change routine in een Module gezet.
Dat werkt uiteraard niet.
 
Een Worksheet_ functie moet je achter het werkblad zetten waarin hij zijn werk moet doen.
Dubbelklik in de VB Editor dus links bovenin op het betreffende werkblad en zet dan de routine in het codewindow.

Ook heb je een aantal lege, dus overbodige modules, een lege klassemodule en 5 ongebruikte userforms.
 
Laatst bewerkt:
Ik zie niets terug van de aangereikte suggesties. Los van de verkeerde plek, hoe krijg je de melding "het argument is niet optioneel"? Ik kan het op geen enkele manier reproduceren?
 
Dat vraag ik me dus ook af.
 
Waarschijnlijk niet goed gelezen melding: 'declaratie van variabelen is overbodig'. :p
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan