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

Vba fout

Status
Niet open voor verdere reacties.

frenske1964

Gebruiker
Lid geworden
3 dec 2007
Berichten
25
Ik ben bezig met een lijst te maken voor de personeelsplanning, iedere maand heeft een eigen sheet.
Als je op de sheet Index het jaar invult, en dan op genereer maanden klikt worden automatisch de sheets met de maanden ingevult, met data uit sheet Zone.
Dit gebeurt in de macro door in cel E7 de code =Zone!$A2 in te vullen, en vervolgens door te trekken tot en met cel E37.
Dan via Transponeren pak ik bereik e8:E37 en plak dit in F7:AI7
Dit werkt bij alle Maanden perfect behalve bij de maand Mei waar in de cel K6 plotseling de formule word omgegooid, en er foute waardes uitkomen.

Iemand een idee?
 

Bijlagen

Beste Frenske1964,

Allereerst welkom op dit forum! Hopelijk word je net zo enthousiast als vele anderen.

Wat betreft je probleem, ik ben geen VBA-deskundige en aan je code kan ik zien dat jij het ook niet bent. :)
Je kunt hier een vraag posten om je code te verbeteren, want activate en select kun je beter niet gebruiken in code. Tevens voer je dezelfde handelingen uit voor 12 tabbladen waardoor je beter met een loop kunt werken, of een aparte module maken die je telkens per tabblad aanroept.
Wanneer je schrijft:
Code:
Range("E7").Select
    ActiveCell.FormulaR1C1 = "=Zone!R[-5]C1"
Kun je daar ook van maken:
Code:
Range("E7").FormulaR1C1 = "=Zone!R[-5]C1"
Of zelfs:
Code:
[E7] = "=Zone!R[-5]C1"

Jouw probleem doet zich ook bij mij voor en ik snap er niets van, maar heb dat opgelost door je formule aan te passen in cel E7. Van Excel heb ik wel verstand :)
Jij gebruikt:
Code:
=Zone!$D2
Ik heb daarvan gemaakt:
Code:
=INDIRECT("Zone!$E"&KOLOM()-3)

Deze formule kun je probleemloos doortrekken naar kolom AI.
Als je de engelse versie hebt wordt het iets als:
Code:
=INDIRECT("Zone!$E"&COLLUMN()-3)

Groeten,
Richard
 
Laatst bewerkt:
Bedankt

Hoi Richard,

Werkt perfect zo, hartelijk bedankt voor de oplossing
 
Test deze eens. Code wat opgekuist
 

Bijlagen

Laatst bewerkt:
Suggestie:
vermijd overbodige formules in werkbladen (herberekenen kost teveel capaciteit/ tijd)

Maak de maandkalender eerst in een matrix -variabele en schrijf die daarna weg. Hoe minder interaktie met een werkblad, hoe sneller VBA loopt.

Code:
Sub Generate()
  Application.ScreenUpdating = False
  For j = 1 To 12
    With Sheets.Add
      .Name = Format(DateSerial(2010, j, 1), "mmmm")
      st = .[A1:AE40]
      For jj = 1 To 31
        st(1, jj) = Format(DateSerial(2010, j, jj), "dddd")
        If jj = 1 Or Format(DateSerial(2010, j, jj), "w", vbMonday) = 1 Then st(2, jj) = "week " & Format(DateSerial(2010, j, jj), "ww")
        st(3, jj) = jj
        If Format(DateSerial(2010, 12, jj), "w", vbMonday) < 6 Then st(4, jj) = 8
      Next
      .[A1:AE40].Offset(2, 4) = st
    End With
  Next
 
Ik gebruikte select en active zodat alle data in een keer in alle 12 sheets zou worden geschreven.
Bij de andere methodes werkt dit niet.

Verder bedankt voor het meedenken :thumb:
 
Warm bakkertje

Hallo Rudi,

Werkt perfekt, en de fout mooi opgelost door de waardes te kopieren.
Een simpele maar grandiose oplossing, ik fixeerde nog alleen op de fout ipv een andere oplossing te zien.

Hartelijk bedankt

Mvg Frans :thumb:
 
In de bijlage een voorbeeld met vereenvoudigde code.

De funktie om pasen te bepalen is gereduceerd.
De macro om een menu-item in de menubalk te zetten is sterk vereenvoudigd.
De code voor de aanmaak van maandkalenders is beperkt.
Het medewerkersoverzicht is simpeler gemaakt.
Het voorblad bevat geen knoppen, maar een combobox waarin het jaar kan worden gekozen. Daarna worden alle kalenders aangepast.
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan