• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

maximaal argumenten

Status
Niet open voor verdere reacties.

bowlingman

Gebruiker
Lid geworden
17 okt 2007
Berichten
433
Hallo,
Weet er iemand hoeveel argumenten je maximaal kan nesten in een vba code

Grtjs.
Armand
 
Wat bedoel je met het nesten van argumenten?
 
Ik gebruik de volgende code
Code:
Sub Wissen()
    If MsgBox("Alle scores worden gewist! Wilt U doorgaan,", vbYesNo) = vbYes Then
        For j = 1 To 30
        Sheets("Speeldag " & j).Range("A4:B7,G4:L7,R4:S7,X4:AC7," & _
                              "A22:B25,G22:L25,R22:S25,X22:AC25," & _
                              "A40:B43,G40:L43,R40:S43,X40:AC43," & _
                              "A58:B61,G58:L61,R58:S61,X58:AC61," & _
                              "A76:B79,G76:L79,R76:S79,X76:AC79," & _
                              "A94:B97,G94:L97,R94:S97,X94:AC97," & _
                              "A112:B115,G112:L115,R112:S115,X112:AC115").ClearContents
        Next j
        For k = 1 To 30
        Sheets("Speeldag " & k).Range("A130:B133,G130:L133,R130:S133,X130:AC133").ClearContents
        Next k
    End If
End Sub
Als ik de range van "K" bij die van "J" plaats krijg ik de foutmelding "Door toepassing of object gedefinieerde fout"
Daarom dat ik dan ook voor die laatste cellen leeg te kamen een aparte For - Next heb gebruikt.

Grtjs.
Armand
 
Dat is dus het meegeven van argumenten en niet het nesten er van.
Ik denk dat het niet gaat om het aantal argumenten maar om de totale lengte van de opdrachtregel die dan de 256 posities overschrijdt.

Je code kan je overigens ook in 1 loop doen:
Code:
Sub Wissen()
    If MsgBox("Alle scores worden gewist! Wilt U doorgaan,", vbYesNo) = vbYes Then
        For j = 1 To 30
            Sheets("Speeldag " & j).Range("A4:B7,G4:L7,R4:S7,X4:AC7," & _
                              "A22:B25,G22:L25,R22:S25,X22:AC25," & _
                              "A40:B43,G40:L43,R40:S43,X40:AC43," & _
                              "A58:B61,G58:L61,R58:S61,X58:AC61," & _
                              "A76:B79,G76:L79,R76:S79,X76:AC79," & _
                              "A94:B97,G94:L97,R94:S97,X94:AC97," & _
                              "A112:B115,G112:L115,R112:S115,X112:AC115").ClearContents
            Sheets("Speeldag " & j).Range("A130:B133,G130:L133,R130:S133,X130:AC133").ClearContents
        Next j
    End If
End Sub
 
Laatst bewerkt:
Ja het heeft te maken met de lengte van de opdrachtregel.
Heb eventjes alles aaneen gezet en dan heb ik meer dan 300 posities.
Ik wist echter niet dat je ook een loop kan plaatsen, zoals jij aangeeft.
Zal de code dan zo aanpassen. Waarschijnlijk door de volledige code netjes in twee gelijke stukken te kappen.

Bedankt
Ed
 
als je alle betreffende cellen op een tabblad selecteert kun je er een benoemd bereik van maken dat je kun wissen met
Code:
Range("benoemd bereik").ClearContents
 
Slim :thumb:
 
Nog een optie:
Code:
Sub Wissen()
    Dim j As Long
    
    For j = 1 To 30
        With Sheets("Speeldag " & j)
            Intersect(.Range("A:B,G:L,R:S,X:AC"), .Range("4:7,22:25,40:43,58:61,76:79,94:97,112:115,130:133")).ClearContents
        End With
    Next
End Sub
 
Laatst bewerkt:
@Haije
Een benoemd bereik had ik al geprobeert, maar dan moet ik op alle sheets(30 in totaal) dat berik benoemen en krijg ik 30 benoemde bereiken

@Timshel
Dit werkt ook perfect en maakt de code toch een stuk korter.
Kan ik dit ook met de volgende code
Code:
For j = 1 To 30
    With Sheets("Speeldag " & j)
        
        .Range("K14:N14,K32:N32,K50:N50,K68:N68,K86:N86,K104:N104,K122:N122,K140:N140").FormulaR1C1 = _
        "=IF(SUM(RC[-5])>(RC[12]),1,IF(SUM(RC[-5])<(RC[12]),0,IF(SUM(RC[-5])=(RC[12]),0.5)))"
    
        .Range("AB14:AE14,AB32:AE32,AB50:AE50,AB68:AE68,AB86:AE86,AB104:AE104,AB122:AE122,AB140:AE140").FormulaR1C1 = _
        "=IF(SUM(RC[-5])>(RC[-22]),1,IF(SUM(RC[-5])<(RC[-22]),0,IF(SUM(RC[-5])=(RC[-22]),0.5)))"
    End With
Next j
Heb het op verschillende manieren geprobeert met "Intersect" maar krijg steeds een foutmelding

Grtjs.
Armand
 
Er zit een zekere structuur in het actieve bereik. Als je die vindt kun je vervolgens de code beter structureren waardoor die overzichtelijk en makkelijker aan te passen wordt.
Code:
Sub tsh()
    Dim Rng
    
    For j = 1 To 30
        With Sheets("Speeldag " & j)
            Set Rng = .Range("14:14,32:32,50:50,68:68,104:104,122:122,140:140")
            Intersect(.Range("K:N"), Rng).FormulaR1C1 = _
                "=IF(SUM(RC[-5])>(RC[12]),1,IF(SUM(RC[-5])<(RC[12]),0,IF(SUM(RC[-5])=(RC[12]),0.5)))"
            Intersect(.Range("AB:AE"), Rng).FormulaR1C1 = _
                "=IF(SUM(RC[-5])>(RC[-22]),1,IF(SUM(RC[-5])<(RC[-22]),0,IF(SUM(RC[-5])=(RC[-22]),0.5)))"
        End With
    Next
End Sub
 
Laatst bewerkt:
Bedankt,
Werkt ook perfect.
Weeral wat bijgeleerd.
Jullie zijn super

Grtjs.
Armand
 
De formule kan trouwens ook nog wat korter:
Code:
Sub tsh()
    Dim Rng
    
    For j = 1 To 30
        With Sheets("Speeldag " & j)
            Set Rng = .Range("14:14,32:32,50:50,68:68,104:104,122:122,140:140")
            Intersect(.Range("K:N"), Rng).FormulaR1C1 = "=(SIGN(RC[-5]-RC[12])+1)/2"
            Intersect(.Range("AB:AE"), Rng).FormulaR1C1 = "=(SIGN(RC[-5]-RC[-22])+1)/2"
        End With
    Next
End Sub
 
Timsel,
Prachtig.
Maar kan je misschien even de formule die hij zo retourneerd even uitleggen
Code:
=(POS.NEG(F14-W14)+1)/2

Grtjs.
Armand
 
@Timsel,
Denk dat ik er al uit ben.
In de eerste plaats gaat excel w14 aftrekken van f14
Als daarvan het resultaat positief is retourneerd excel "1"
Indien negatief "0"
En indien gelijk wordt er bij de "0" 1 bijgeteld en vervolgens door 2 gedeeld.

Grtjs.
Armand
 
Hallo,
Als ik de code van Timshel gebruik
Code:
Set Rng = .Range("14:14,32:32,50:50")
        Intersect(.Range("K:N"), Rng).FormulaR1C1 = "=(SIGN(RC[-5]-RC[12])+1)/2"
Staat in de cel de volgende formule
Code:
=(POS.NEG(F14-W14)+1)/2
Maar dan retourneerd deze "#WAARDE" in plaats van "0"
Als ik de formule dan handmatig aanpas als volgt
Code:
=ALS.FOUT((POS.NEG(G14-X14)+1)/2;0)
Retourneerd de formule wel "0"
als ik de code wijzig
Code:
Intersect(.Range("K:N"), Rng).FormulaR1C1 = "=IFERROR((SIGN(RC[-5]-RC[12])+1)/2;0)
Krijg ik een foutmelding

Grtjs.
Armand
 
Ik raad het gebruik van ALS.FOUT hier af. Beter kun je je afvragen waarom de formule de foutcode #WAARDE teruggeeft.
 
In de cellen waarnaar de formule verwijst staan ook formules die 2 andere cellen optellen, maar die blijven leeg tot er iets wordt ingevuld.
Als ik uit die cellen de formules verwijder krijg ik "0,5"
 
formules die 2 andere cellen optellen, maar die blijven leeg

leeg = ""?
zoja, vervang "" eens door 0 (nul)
 
Als je op jouw manier de foutwaarde afvangt met ALS.FOUT betekent de uitkomst 0 dus: waarde 1 is groter dan waarde 2 òf een van beide is niet ingevuld.
Snap ik niet.
 
In bijlage vinden jullie een voorbeeldje.
Er moet in de cellen onder "Punten" ten alle tijde 0 staan tot de scores worden ingevuld in de gele vakken Row 1
 

Bijlagen

  • Voorbeeld.xlsm
    18,3 KB · Weergaven: 38
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan