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

Sneltoetsen maken van bepaalde handelingen

Status
Niet open voor verdere reacties.
Je hebt dus geen extra rij maar een kolom ingevoegd. Dan moet je daar de kolom informatie in de code uiteraard ook op aanpassen.
En er dan ook nog voor zorgen dat de lege kolom wordt overgeslagen.
 
Laatst bewerkt:
Je hebt dus geen extra rij maar een kolom ingevoegd. Dan moet je daar de kolom informatie in de code uiteraard ook op aanpassen.
En er dan ook nog voor zorgen dat de lege kolom wordt overgeslagen.

He Edmoor, Ik begrijp dat de code aangepast moet worden, echter ik zie zo niet wat ik dan moest aanpassen.
En de lege kolom hoeft niet te worden overgeslagen, ik had dit even geprobeerd, omdat het werkelijke bestand ook sowieso 1 of 2 meer "gebieden" heeft dan in mijn voorbeeld bestand. Daarnaast kan het voorkomen dat er ooit s een gebied toegevoegd moet worden. Dus dan moet die kolom niet worden overgeslagen :)
 
Probeer deze maar eens. Je moet dan wel voor iedere "Vrij" een lege kolom invoegen:
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Select Case Target.Column
        Case 3 To 8
            Cells(Target.Row, 3).Resize(, 6).ClearContents: Target.Value = 7.25
        Case 10 To 15
            Cells(Target.Row, 10).Resize(, 6).ClearContents: Target.Value = 7.25
        Case 17 To 22
            Cells(Target.Row, 17).Resize(, 6).ClearContents: Target.Value = 7.25
    End Select
End Sub

Wat de wijiziging betreft, het is gewoon een kwestie van kolommen tellen.
 
Obv van het eerste bestand. Als je de opzet per dag consistent houdt dan zal het aanpassen ook niet moeilijk zijn.

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  With Target
    If .Column <> 1 And .Column Mod 6 <> 2 Then
      Cells(.Row, 3).Offset(, (Application.RoundUp((.Column - 1) / 6, 0) - 1) * 6).Resize(, 6).ClearContents
      .Value = 7.25
    End If
  End With
End Sub
 
Laatst bewerkt:
Probeer deze maar eens. Je moet dan wel voor iedere "Vrij" een lege kolom invoegen:
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Select Case Target.Column
        Case 3 To 8
            Cells(Target.Row, 3).Resize(, 6).ClearContents: Target.Value = 7.25
        Case 10 To 15
            Cells(Target.Row, 10).Resize(, 6).ClearContents: Target.Value = 7.25
        Case 17 To 22
            Cells(Target.Row, 17).Resize(, 6).ClearContents: Target.Value = 7.25
    End Select
End Sub

Wat de wijiziging betreft, het is gewoon een kwestie van kolommen tellen.
Ah ik zie het.
Dit werkt inderdaad weer :) Bedankt!
 
En met wat extra rekenwerk komt je dus op mooie kortere code zoals VenA die plaatste :)
 
Of:
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  With Target
    If .Column <> 1 And .Column Mod 6 <> 2 Then
      Cells(.Row, 3).Offset(, ((.Column - 1) \ 7) * 6).Resize(, 6).ClearContents
      .Value = 7.25
    End If
  End With
End Sub
 
Of:
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  With Target
    If .Column <> 1 And .Column Mod 6 <> 2 Then
      Cells(.Row, 3).Offset(, ((.Column - 1) \ 7) * 6).Resize(, 6).ClearContents
      .Value = 7.25
    End If
  End With
End Sub

Wat of is er een verschil/voordeel van deze code en de code van VenA dan?
 
Kortere schrijfwijze/snellere berekening misschien?

Ik zou gewoon de code van @edmoor nemen, veel makkelijker te wijzigen en die je begrijpt.
 
Die ook nog wel wat eenvoudiger kan :)
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Select Case Target.Column
        Case Is < 3, Is > 22: kolom = 0
        Case Is >= 17:        kolom = 17
        Case Is >= 10:        kolom = 10
        Case Is >= 3:         kolom = 3
    End Select
    
    If kolom > 0 Then
        Cells(Target.Row, kolom).Resize(, 6).ClearContents: Target.Value = 7.25
        Cancel = True
    End If
End Sub
 
Laatst bewerkt:
Wat je gezien hebt is dat er meerdere mogelijkheden zijn. Van makkelijk leesbare to moeilijker leesbare maar kortere code.
Het belangrijkste om te weten bij het gebruik van VBA op werkbladen is dat het allemaal erg nauw luistert.
 
Oke :)
Ik was er nog even mee aan het spelen. Ik heb nu 2 kolommen toegevoegd.
Echter wanneer ik iemand van vrij naar een gebied (terug) zet, voegt hij 7,25 toe in plaats van dat hij het verplaatst. Dus naar rechts verplaatst hij de 7,25. Maar terug naar links voegt hij een 7,25 toe.
Ik heb de overige dagen nu ook toegevoegd aan het bestand en als ik iemand donderdag op vrij zet en wil hem daarna terugzetten naar gebied 5 of 6, voegt hij zelfs 2x 7,25 toe. Ik heb dat in het bestand even laten staan voor de duidelijkheid.

En ik vroeg me nog af of het ook mogelijk is als ik bij iemand 7,25 invul, dat de naam van diegene dan wordt gehighlight. Dus niet als ik hem verplaats van gebied, maar alleen als ik 7,25 invul bij iemand die nog niet ingepland stond.
 
Sorry hierbij de bijlage
 

Bijlagen

  • voorbeeld planning met.xlsm
    17,3 KB · Weergaven: 42
Dan heb je m'n opmerking over het tellen van kolommen niet begrepen want daar zitten toch echt je fouten.
Niet alleen in de Case maar ook in de Resize.

Gebruik daarnaast mijn voorbeeld uit #31, dat is eenvoudiger.

Stap af van dat idee over highlighten want dan moet je dat niet alleen doen op het moment dat je aangeeft maar ook per naam bijhouden wanneer dat niet meer nodig is en daarop reageren. Het kan allemaal maar je begeeft je dan in een wespennest. Als je simpel kolommen tellen al niet goed doet om de code daarop aan te passen ga je dat helemaal niet willen. Zie mijn opmerking over "nauw luisteren".
 
Laatst bewerkt:
Wat of is er een verschil/voordeel van deze code en de code van VenA dan?
Los van de kortere schrijfwijze/snellere berekeningen is het ook consistent. In de methode van @edmoor moet je steeds een nieuwe voorwaarde opnemen als je dagen gaat toevoegen. In het bestandje heb ik mijn 'kladblok' laten staan en wel iets uitgebreid voor de duidelijkheid. Dus eerst analyseren van het werkblad kan efficiëntere code opleveren.
Met kleurtje
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim r As Range
  With Target
    If .Column <> 1 And .Column Mod 8 <> 2 Then
      Set r = Cells(.Row, 3).Offset(, ((.Column - 1) \ 9) * 8).Resize(, 8)
        Cells(.Row, 1).Interior.Color = IIf(Application.Count(r) = 0, vbGreen, xlNone)
        r.ClearContents
      .Value = 7.25
    End If
  End With
  Cancel = True
End Sub

Met kladblok
 

Bijlagen

  • voorbeeld planning met.xlsb
    19,3 KB · Weergaven: 34
Zo heb je alle vrijheid om kolommen toe te voegen.
Code:
If .Column <> 1 And .Column Mod ([c1].End(xlToRight).Column - 3) <> 2 Then
      Set r = Cells(.Row, 3).Offset(, ((.Column - 1) \ ([c1].End(xlToRight).Column - 2)) * ([c1].End(xlToRight).Column - 3)).Resize(, [c1].End(xlToRight).Column - 3)

Ps:
Vul twee cellen voorbij het laatste gebied op de eerste rij iets in.
 
Laatst bewerkt:
Ik heb het met de code van edmoor nu werkend, inclusief nadat ik nog een dag had toegevoegd heb ik de code kunnen aanpassen dat het dan ook werkt.

@VenA Alleen met die van jou VenA heb ik het kleurtje er ook bij!
Bedankt in ieder geval voor het verduidelijken VenA. En het kleurtje, perfect !

Echter hierbij nog 1 ding waar ik niet uitkom. Ik heb een dag toegevoegd.
Wanneer ik de 7,25 op zondag van gebied 5 verplaats naar 4,3,2 of 1 vult hij een extra 7,25 in, in plaats van dat hij hem verplaatst.
Op zaterdag gebeurd dat van gebied 4 terug naar 3,2,1. Op vrijdag gebeurd dat van gebied 3 naar 2 en 1.

Ik zie nu weer even niet hoe ik dat moet aanpassen in jou code.
 
Hierbij het bestand van VenA met de dag die ik heb toegevoegd
 

Bijlagen

  • voorbeeld planning met.xlsm
    20,3 KB · Weergaven: 35
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan