• 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.

3 mogelijkheden nodig, 2 werkt

Status
Niet open voor verdere reacties.

Geminite

Gebruiker
Lid geworden
24 mrt 2009
Berichten
55
Beste helpers,

Op basis van kolom C (zal nooit lager dan regel 10 komen) wil ik naar een andere sheet saven. Om dit te doen heb ik in de module 3 aparte sub's gemaakt. Helaas voor mij werkt het wel op 2 opties, maar met de derde accepteerd hij het niet.

Code:
With Sheets("basis")
For Each cl In .Range("C2:C10")
If cl = "alpha" Then Run "alpha"
Next
If cl = "mot" Then Run "mot"
End With

Bovenstaande werkt goed, maar onderstaande krijg ik melding, geen If command ?

Code:
With Sheets("basis")
For Each cl In .Range("C2:C10")
If cl = "alpha" Then Run "alpha"
ElseIf cl = "brava" Then Run "bravo" 
Next
If cl = "mot" Then Run "mot"
End With

Kunnen jullie mij hiermee helpen ?
 
Beste helpers,

Op basis van kolom C (zal nooit lager dan regel 10 komen) wil ik naar een andere sheet saven. Om dit te doen heb ik in de module 3 aparte sub's gemaakt. Helaas voor mij werkt het wel op 2 opties, maar met de derde accepteerd hij het niet.

Code:
With Sheets("basis")
For Each cl In .Range("C2:C10")
If cl = "alpha" Then Run "alpha"
Next
If cl = "mot" Then Run "mot"
End With

Bovenstaande werkt goed, maar onderstaande krijg ik melding, geen If command ?

Code:
With Sheets("basis")
For Each cl In .Range("C2:C10")
If cl = "alpha" Then Run "alpha"
ElseIf cl = "brava" Then Run "bravo" 
Next
If cl = "mot" Then Run "mot"
End With

Kunnen jullie mij hiermee helpen ?

Naar mijn bescheiden mening kunnen ze beide niet werken, mist wat boven en onder. Bij de onderste in iedergeval een end if
 
Laatst bewerkt:
Haal bij Elseif Else eens weg.
Doet hij het nu wel?
 
Bedankt voor de hint over de else.

De werkende code is

Code:
With Sheets("basis")
For Each cl In .Range("C2:C10")
If cl = "alpha" Then Run "alpha"
If cl = "brava" Then Run "bravo"
If cl = "mot" Then Run "mot"
Next
End With

Revdutchie; je had gelijk alleen alpha draaide. Maar voor mot kreeg ik geen foutmelding. Terug naar het kooktoestel en bedankt weer
 
Alternatief
Code:
Sub tst()
For Each cl In [basis!C2:C10]
    Select Case cl.Value
        Case "alpha": Run "alpha"
        Case "bravo": Run "bravo"
        Case "mot": Run "mot"
    End Select
Next
End Sub
 
Bedankt voor de hint over de else.

De werkende code is

Code:
With Sheets("basis")
For Each cl In .Range("C2:C10")
If cl = "alpha" Then Run "alpha"
If cl = "[COLOR="Red"]brava[/COLOR]" Then Run "[COLOR="red"]bravo[/COLOR]"
If cl = "mot" Then Run "mot"
Next
End With

Revdutchie; je had gelijk alleen alpha draaide. Maar voor mot kreeg ik geen foutmelding. Terug naar het kooktoestel en bedankt weer

Ik neem aan dat bravA en bravO zo moet zijn ?
 
Nog iets korter:

Code:
Sub tst()
For Each cl In [basis!C2:C10]
    Run cl.Value
Next
End Sub

Met vriendelijke groet,


Roncancio
 
Nog iets korter:

Code:
Sub tst()
For Each cl In [basis!C2:C10]
    Run cl.Value
Next
End Sub

Met vriendelijke groet,


Roncancio

Subliem, nu maar hopen dat het inderdaad 2 x bravo is :cool:

EDIT, wat ik me af vraag, de code is wel korter maar moet bij elke waarde in c2:c10 alle namen in de macrolijst aflopen.
daarnaast natuurlijk het risico dat er een waarde in staat die ook als macronaam bestaat, of zie ik dit fout ?
 
Laatst bewerkt:
EDIT, wat ik me af vraag, de code is wel korter maar moet bij elke waarde in c2:c10 alle namen in de macrolijst aflopen.
daarnaast natuurlijk het risico dat er een waarde in staat die ook als macronaam bestaat, of zie ik dit fout ?

Je eerste punt klopt niet omdat per regel de macro waarvan de naam in het bereik staat, wordt doorlopen en niet de andere macro's.
Je 2e punt speelt ook bij de macro's die WarmBakkertje heeft bijgestuurd.

Mijn code heeft wel een andere tekortkoming: Alle cellen in het bereik dienen gevuld te zijn met 1 van de macronamen.
Maar dat zou je op kunnen lossen door ...

Code:
On Error Resume Next

... erboven te plaatsen.

Code:
Sub tst()
On Error Resume Next
For Each cl In [basis!C2:C10]
    Run cl.Value
Next
End Sub

Met vriendelijke groet,


Roncancio
 
Laatst bewerkt:
Je eerste punt klopt niet omdat per regel de macro waarvan de naam in het bereik staat, wordt doorlopen en niet de andere macro's.

Ja, maar nu wordt er toch per regel de macrolijst geraadpleegd om te zien of de waarde voorkomt ? Dus welke waarde er ook in de range staat, er moet gekeken worden of die in de macrolijst voorkomt.

Of zie ik het nou helemaal fout ?
 
Ja, maar nu wordt er toch per regel de macrolijst geraadpleegd om te zien of de waarde voorkomt ? Dus welke waarde er ook in de range staat, er moet gekeken worden of die in de macrolijst voorkomt.

Of zie ik het nou helemaal fout ?

Daar heb je helemaal gelijk in, maar dat is ook het geval als je met IF of Case gaat werken.
Dan wordt per IF of Case gekeken of de waarde van de cel overeenkomt met de voorwaarde van de IF of Case.

Met vriendelijke groet,


Roncancio
 
Daar heb je helemaal gelijk in, maar dat is ook het geval als je met IF of Case gaat werken.
Dan wordt per IF of Case gekeken of de waarde van de cel overeenkomt met de voorwaarde van de IF of Case.

Ja, ok, maar in dit voorbeeld zijn dat maar 3 If's terwijl een macrolijst er honderden kan bevatten.

Roncancio, weer bedankt voor de nuttige info.
 
Ja, ok, maar in dit voorbeeld zijn dat maar 3 If's terwijl een macrolijst er honderden kan bevatten.

Inderdaad, dan is het handiger om direct de macronaam te gebruiken zoals ik gedaan heb, omdat je dan niet voor elke macro een If of Case hoeft te schrijven.

Met vriendelijke groet,


Roncancio
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan