Hallo,
Onlangs hier een zeer mooie code gekregen die in een range controleert of er voor een bepaalde dag al een 2 x 1 en 2 x 2 is ingevuld als er 4 lege cellen overblijven in die range. Deze code werkt uitstekend, vult 1 of 2 automatisch aan wanneer nodig, maar op het werk willen ze nu toch wel iets gewijzigd hebben.
De controle werkt nog goed maar nu voor 5 lege cellen zijn. Ik heb de test gedaan met een message box die opkomt als de invoer in de resterende cellen moet stoppen, dit werkt.
Vraag:
In de plaats van de message box zou de code moeten komen dat hij de resterende lege cellen vult met een “X” In bijlage enkele voorbeelden hoe het eruitziet.
De al gedeeltelijk aangepaste code met de message box:
De oorspronkelijke code die het aanpassen van shift 1 en 2 automatisch aanpast.
Ik hoop dat mijn uitleg voldoende is.
Alvast bedankt
Marc
Onlangs hier een zeer mooie code gekregen die in een range controleert of er voor een bepaalde dag al een 2 x 1 en 2 x 2 is ingevuld als er 4 lege cellen overblijven in die range. Deze code werkt uitstekend, vult 1 of 2 automatisch aan wanneer nodig, maar op het werk willen ze nu toch wel iets gewijzigd hebben.
De controle werkt nog goed maar nu voor 5 lege cellen zijn. Ik heb de test gedaan met een message box die opkomt als de invoer in de resterende cellen moet stoppen, dit werkt.
Vraag:
In de plaats van de message box zou de code moeten komen dat hij de resterende lege cellen vult met een “X” In bijlage enkele voorbeelden hoe het eruitziet.
De al gedeeltelijk aangepaste code met de message box:
Code:
Option Explicit
Const lEmp As Long = 14
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
Dim i As Long, j As Long
Dim cell As Range
Dim rCell As Range
If Intersect(Target, Range("B6:AF6").Resize(lEmp)) Is Nothing Then Exit Sub
On Error Resume Next
With Application
.EnableEvents = False
'ActiveSheet.Unprotect ""
Target(1).Value = UCase(Target(1).Value)
'Range("A3") = Now
'Range("A5") = sUser
'ActiveSheet.Protect ""
Set Rng = Cells(6, Target.Column).Resize(lEmp)
If .CountBlank(Rng) + .Min(.CountIf(Rng, 1), 2) + .Min(.CountIf(Rng, 2), 2) <= 5 And .CountBlank(Rng) > 0 Then 'kontrole werkt
'Hier code die de resterende lege cellen vult met "X"
MsgBox "Stop filling", _
vbInformation, "0000"
End If
.EnableEvents = True
End With
End Sub
De oorspronkelijke code die het aanpassen van shift 1 en 2 automatisch aanpast.
Code:
Option Explicit
Const lEmp As Long = 14 'Aantal personen
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
Dim i As Long, j As Long
If Intersect(Target, Range("B6:AF6").Resize(lEmp)) Is Nothing Then Exit Sub
With Application
.EnableEvents = False
ActiveSheet.Unprotect "1234"
Target(1).Value = UCase(Target(1).Value)
Range("A3") = Now
Range("A5") = sUser
'Range("A5") = .UserName
ActiveSheet.Protect "1234"
Set Rng = Cells(6, Target.Column).Resize(lEmp)
If .CountBlank(Rng) + .Min(.CountIf(Rng, 1), 2) + .Min(.CountIf(Rng, 2), 2) <= 4 And .CountBlank(Rng) > 0 Then
For j = 1 To 2
For i = 1 To 2 - .CountIf(Rng, j)
Rng(Evaluate("min(if(" & Rng.Address(0, 0) & "="""",row(1:" & lEmp & ")))")) = j
Next
Next
End If
.EnableEvents = True
End With
End Sub
Ik hoop dat mijn uitleg voldoende is.
Alvast bedankt
Marc