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

Next werkt niet ineen macro

Status
Niet open voor verdere reacties.

jaclang

Gebruiker
Lid geworden
25 sep 2012
Berichten
30
Hallo

Ik heb een Macro met een for next lus dit werkt goed.
echter. nu zet ik er een if regel tussen met als uitkomst next.
dan krijg ik de melding dat er een next zonder for is

hier gaat het over (zie de code)
For Each Sh In sNames
If Range("B17").Interior.Color = yellow Then If MsgBox("Het formaat klopt niet dit Tabblad moet u handmatig over zetten") = vbCancel Then Next Sh

Periode_1 t/m Periode_13 zijn tabbladen
Er wordt hier data uit een ander Excel bestand gehaald
daar kan een regel zijn toegevoegd en dat mag er niet (in het ander bestand) geplakt worden en moet er overgegaan worden naar een volgend tabblad

Code:
sNames = (Array("periode_1", "periode_2", "periode_3", "periode_4", "periode_5", "periode_6", "periode_7", "periode_8", "periode_9", "periode_10", "periode_11", "periode_12", "periode_13"))
Application.ScreenUpdating = False
 For Each Sh In sNames
 Sheets(Sh).Select
 
    Range("B8:B16").Select
    Selection.ClearContents
    Range("D8:G16").Select
    Selection.ClearContents
    Range("I8:J16").Select
    Selection.ClearContents

GoToUrenlijst
    Sheets(Sh).Select
   
   Range("B8:B16").Select
   Application.CutCopyMode = False
    Selection.Copy
    ThisWorkbook.Activate
    Range("B8").Select
    ActiveSheet.Paste
    If Range("B17").Interior.Color = yellow Then If MsgBox("Het formaat klopt niet dit Tabblad moet u handmatig over zetten") = vbCancel Then Next Sh
    
 GoToUrenlijst
   
  Range("I56:J64").Select
    Application.CutCopyMode = False
    Selection.Copy
    ThisWorkbook.Activate
    Range("I56").Select
    ActiveSheet.Paste

   Next Sh

End Sub
------------------------------------------------------------------
Sub GoToUrenlijst()

Dim wb As Workbook, x As String
For Each wb In Workbooks
If wb.Name <> ThisWorkbook.Name Then x = wb.Name
Next wb
Workbooks(x).Activate

End Sub

Bij voorbaat mijn dank
 
VBA ken geen opdracht om naar de volgende itteratie van een For loop te gaan.
Daarnaast steekt de code nogal raar in elkaar.
Afgezien van de Selects en Activates heb je 2x een If in 1 regel staan en, zoals ExcelAmateur al opmerkte, beide zonder End If.
 
jac,

afgezien van het ontbreken van End If,

probeer dit eens
Code:
    If Range("B17").Interior.Color = yellow Then If MsgBox("Het formaat klopt niet dit Tabblad moet u handmatig over zetten") = vbCancel Then [COLOR="#FF0000"]GoTo volgendesheet[/COLOR]
    
 GoToUrenlijst
   
  Range("I56:J64").Select
    Application.CutCopyMode = False
    Selection.Copy
    ThisWorkbook.Activate
    Range("I56").Select
    ActiveSheet.Paste
[COLOR="#FF0000"]volgendesheet[/COLOR]
   Next Sh
 
Dat werkt uiteraard, als je nog een : toevoegt, maar ook dat GoTo kan achterwege blijven als die If statements goed in elkaar worden gestoken.

Bijvoorbeeld:
Code:
    If Range("B17").Interior.Color = yellow Then
        MsgBox ("Het formaat klopt niet dit Tabblad moet u handmatig over zetten"), vbCritical
    Else
        GoToUrenlijst
        Range("I56:J64").Select
        Application.CutCopyMode = False
        Selection.Copy
        ThisWorkbook.Activate
        Range("I56").Select
        ActiveSheet.Paste
    End If
Next Sh
 
Laatst bewerkt:
De code zou er raar uit kunnen zien maar werkt wel.
Dit heb ik niet zelf gemaakt maar iemand anders, jaren geleden, (excel expert) die ik niet meer kan bereiken.

Ik ben maar een beginnend macro amateur iets meer uitleg zou welkom zijn.
bijvoorbeeld
end IF Waar zou dat moeten staan?
en waarom zou next op deze plaats niets doen en geheel onderaan wel?

Met dank aan Giga Senior die wel een oplossend antwoord geeft waar ik iets mee kan.

Echter
de GoTo volgendesheet springt wel naar de regel met volgendesheet maar dan krijg ik de melding ‘Compuleerfout: Sub of Function niet gedefineerd’.
 
Ik heb net #5 uitgebreid met een voorbeeld voor dat stukje.
 
De code zou er raar uit kunnen zien maar werkt wel.
Dit heb ik niet zelf gemaakt maar iemand anders, jaren geleden, (excel expert) die ik niet meer kan bereiken.

Ik ben maar een beginnend macro amateur iets meer uitleg zou welkom zijn.
Je hebt al bijna hetzelfde niveau bereikt.
 
Op antwoord #5
Ik heb dit zo ingevoerd. Het script loopt nu wel door
maar de waarden worden nog steeds in het betreffende tabblad gelpakt waar dit niet zou moeten.
na de If, als deze aan de voorwaarde voldoet, moet de rest van het blad worden overgeslagen en door next naar het volgende tabblad worden gestuurd.

het komt hier op neer.
Als in het te kopieren bestand in het te bewerken tabblad er een regel is bij gekomen dan mag er in het andere bestand niet geplakt worden.
Dit is om te voorkomen dat er regels worden overschreven.



Dat werkt uiteraard, als je nog een : toevoegt, maar ook dat GoTo kan achterwege blijven als die If statements goed in elkaar worden gestoken.

Bijvoorbeeld:
Code:
If Range("B17").Interior.Color = yellow Then
MsgBox ("Het formaat klopt niet dit Tabblad moet u handmatig over zetten"), vbCritical
Else
GoToUrenlijst
Range("I56:J64").Select
Application.CutCopyMode = False
Selection.Copy
ThisWorkbook.Activate
Range("I56").Select
ActiveSheet.Paste
End If
Next Sh

De andere optie springt wel naar het einde maar dan krijg ik een foutmelding
de GoTo volgendesheet springt wel naar de regel met volgendesheet maar dan krijg ik de melding ‘Compuleerfout: Sub of Function niet gedefineerd’.
 
jac,

maak er eens dit van:
Code:
    If Range("B17").Interior.Color = yellow Then If MsgBox("Het formaat klopt niet dit Tabblad moet u handmatig over zetten") = vbCancel Then GoTo volgendesheet[COLOR="#FF0000"]:[/COLOR]
    
 GoToUrenlijst
   
  Range("I56:J64").Select
    Application.CutCopyMode = False
    Selection.Copy
    ThisWorkbook.Activate
    Range("I56").Select
    ActiveSheet.Paste
volgendesheet[COLOR="#FF0000"]:[/COLOR]
   Next Sh

@allen,

volgens mij moet If met End If, alleen als gebruik gemaakt wordt van de zgn blokstructuur (uit de help van Excel 2010):
If...Then...Else, instructie
Zie ook Voorbeeld Bijzonderheden

Voert een groep instructies voorwaardelijk uit, afhankelijk van de waarde van een expressie.

Syntaxis

If voorwaarde Then [instructies] [Else andersinstructies]

U kunt ook de volgende syntaxis in blokvorm gebruiken:

If voorwaarde Then
[instructies]

[ElseIf voorwaarde-n Then
[andersindieninstructies] ...

[Else
[andersinstructies]]

End If
 
Laatst bewerkt:
Op antwoord #5
Ik heb dit zo ingevoerd. Het script loopt nu wel door
maar de waarden worden nog steeds in het betreffende tabblad gelpakt waar dit niet zou moeten.
na de If, als deze aan de voorwaarde voldoet, moet de rest van het blad worden overgeslagen en door next naar het volgende tabblad worden gestuurd.

Dan pas je de voorwaarden in de If toch aan?
Jij kent die, ik niet.
 
Opgelost.

iedereen bedankt voor de antwoorden. Ik ben hier geweldig mee geholpen.

Alleen Ik heb geen idee hoe ik deze topic op ‘opgelost' kan zetten.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan