Je hebt er in eerste instantie wel HEEL veel overbodige code in zitten. Je kan 156 routines vervangen door 3 routines.
Die 52 "vooruit" routines kunnen door 1 routine worden vervangen en de bestaande kunnen dus weg. De vervanger staat verderop in dit bericht.
Die 52 BeforeDoubleClick routines kunnen door 1 routine worden vervangen en kunnen dus weg. De vervanger is dit:
(In de ThisWorkbook sectie)
Code:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
If LCase(Left(Sh.Name, 4)) <> "week" Then Exit Sub
If Not Intersect(Target, Range("C4:I53")) Is Nothing Then
On Error Resume Next
Target.Value = "????"
End If
Cancel = True
End Sub
Die 52
Worksheet_Change(ByVal Target As Range) routines kunnen door 1 routine worden vervangen en de bestaande kunnen dus weg. De vervanger is dit:
(In de ThisWorkbook sectie)
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim i As Integer
If LCase(Left(Sh.Name, 4)) <> "week" Then Exit Sub
Select Case Target.Row
Case 4 To 53
Select Case Target.Column
Case 3 To 10
For i = 4 To 53
If Target.Row <> i And Cells(i, Target.Column).Value = Target.Value Then
If InStr("????TX", Trim(Target.Value)) = 0 Then
MsgBox Target.Value & " is al ingedeeld.", vbCritical, "Reeds ingedeeld"
Application.EnableEvents = False
Target.Value = ""
Application.EnableEvents = True
Exit Sub
End If
End If
Next i
End Select
End Select
End Sub
Verder kan je alle bladen waarvan de naam met Week begint, bij het openen van het document onzichtbaar maken.
(In de ThisWorkbook sectie)
Code:
Private Sub Workbook_Open()
Dim Sh As Worksheet
For Each Sh In ThisWorkbook.Sheets
If LCase(Left(Sh.Name, 4)) = "week" Then Sh.Visible = False
Next Sh
End Sub
Als je ze ook wilt verbergen voor het rechts klik menu links onderin, gebruik je niet sh.Visible = False maar sh.Visible = xlVeryHidden
Het blad kan dan weer zichtbaar gemaakt worden in die ene routine die door de knopjes wordt gestart:
(In een module en aan alle knopjes hangen)
Code:
Sub GaNaarWeek()
Dim Blad As String
Blad = ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text
Blad = "Week " & Mid(Blad, 5)
Sheets(Blad).Visible = True
Sheets(Blad).Select
End Sub
Met ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text haal je dus de Caption op van de knop (shape) waarop werd geklikt. Dit geldt voor shapes, niet voor echte buttons.
En kan weer onzichtbaar worden gemaakt als je terug gaat naar het blad Weken:
(In de ThisWorkbook sectie)
Code:
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If LCase(Left(Sh.Name, 4)) = "week" Then Sh.Visible = False [COLOR="#008000"]'Of xlVeryHidden[/COLOR]
End Sub
Ik vind het zonde om zoveel routines te gebruiken als het niet nodig is, vandaar deze wat uitgebreidere uitleg. Het maakt het onderhoud van zo'n document een stuk eenvoudiger.
Als je dat gereed hebt kunnen we eens naar het mailen kijken want ook dat is geen probleem.
Nog een tip voor leesbaarheid:
Schrijf Range aanduidingen altijd met hoofdletter. Dus niet:
Range("a1:a10") maar Range("A1:A10")