Option Explicit
Private Sub UserForm_Activate()
Database.DbWeeknr.SetFocus
Database.DBDagnr.BackColor = &H80000004
End Sub
Private Sub OKButton_Click()
'All 'nr' vars in the next dim are numbers, but declared as string!
'Dim Dagnr As String, Weeknr As String, WeeknrBeginRij As String, WeeknrEindeRij As String, _
WeekSelectie As String, DagnrBeginRij As String, DagnrEindeRij As String, DagSelectie As String
Dim Dagnr As Integer, Weeknr As Integer, WeeknrBeginRij As Long, WeeknrEindeRij As Long, _
WeekSelectie As String, DagnrBeginRij As Long, DagnrEindeRij As Long, DagSelectie As String
Dim WeeknrOK As Boolean, DagnrOK As Boolean
'Application.ScreenUpdating = False 'the screen is not updated by this sub
'do this later (when you start changing things)
'Sheets("Masterdata").Unprotect ("1234")
'Sheets("Data Invoer").Unprotect ("1234")
'Sheets("Database").Unprotect ("1234")
'=========
'= Start = a bit useless comment
'=========
If Database.DbWeeknr.Value > "" Then
'WeeknrOK = False '1. it is False at the start
'2. if you want this, don't do it here _
do it before the if
If IsNumeric(Database.DbWeeknr.Value) Then
Weeknr = CInt(Database.DbWeeknr.Value)
If Weeknr > 0 And Weeknr < 54 Then
WeeknrOK = True
End If
End If
End If
If Not WeeknrOK Then
With Database.DbWeeknr
.SelStart = 0
.SelLength = Len(.Text)
End With
Database.DbWeeknr.SetFocus
MsgBox "Voer een geldig Weeknummer in!", vbDefaultButton1, "Geen Weeknummer ingevoerd"
Exit Sub
End If
'If WeeknrOK Then 'at this point this is true, so not necessary
Sheets("Masterdata").Unprotect ("1234")
Sheets("Data Invoer").Unprotect ("1234")
Sheets("Database").Unprotect ("1234")
WeeknrEindeRij = Zoeken(Format(Weeknr, "0"), "Data Invoer", "AB4001", "AB")
If WeeknrEindeRij = 0 Then
MsgBox "Er zijn geen gegevens gevonden aan de hand van het ingegeven Weeknummer!", vbDefaultButton1, "Geen gegevens gevonden"
Else
WeeknrBeginRij = ZoekenBNO(Weeknr, "Data Invoer", "AB12", "AB4001", "AB")
WeekSelectie = "AB" & WeeknrBeginRij & ":" & "AB" & WeeknrEindeRij
MsgBox "De gehele week zou nu zijn gezocht. Selectie: " & WeekSelectie
If Database.DBDagnr.Value > "" Then
If IsNumeric(Database.DBDagnr.Value) Then
Dagnr = CInt(Database.DBDagnr.Value)
If Dagnr > 0 And Dagnr < 8 Then
DagnrOK = True
End If
End If
If Not DagnrOK Then
With Database.DBDagnr
.SelStart = 0
.SelLength = Len(.Text)
End With
Database.DBDagnr.SetFocus
MsgBox "Voer een geldig Dagnummer in (1 t/m 7)! Indien het Dagnummer leeg wordt gelaten zal de gehele week worden bijgezocht", vbDefaultButton1, "Geen geldig Dagnummer ingevoerd"
Exit Sub
End If
'If DagnrOK Then '<--- useless (always true here)
DagnrEindeRij = ZoekenDAGONB(Dagnr, "Data Invoer", "AC" & WeeknrBeginRij, "AC" & WeeknrEindeRij, "AC")
If DagnrEindeRij = "" Then MsgBox "Er zijn geen gegevens gevonden aan de hand van het ingegeven Dagnummer!", vbDefaultButton1, "Geen gegevens gevonden"
DagnrBeginRij = ZoekenDAGBNO(Dagnr, "Data Invoer", "AC" & WeeknrBeginRij, "AC" & WeeknrEindeRij, "AC")
DagSelectie = "AC" & DagnrBeginRij & ":" & "AC" & DagnrEindeRij
MsgBox "Het dagnummer zou nu ook zijn bijgezocht. DagSelectie: " & DagSelectie
End If 'WeeknrEindeRij
End If 'Dagnr > ""
'End If 'DagnrOK If
'End If 'WeeknrOK If
'Einde:
Sheets("Masterdata").Protect DrawingObjects:=True, Contents:=True, AllowUsingPivotTables:=True, Scenarios:=True _
, AllowFiltering:=True, Password:="1234"
Sheets("Data Invoer").Protect DrawingObjects:=True, Contents:=True, AllowUsingPivotTables:=True, Scenarios:=True _
, AllowFiltering:=True, Password:="1234"
Sheets("Database").Protect DrawingObjects:=True, Contents:=True, AllowUsingPivotTables:=True, Scenarios:=True _
, AllowFiltering:=True, Password:="1234"
'Application.ScreenUpdating = True
Unload Me
End Sub
Private Sub CancelButton_Click()
Unload Me
End Sub
Private Sub DBWeeknr_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
OKButton_Click
End If
End Sub
Private Sub DBDagnr_Enter()
Database.DBDagnr.BackColor = &H80000005
End Sub
Private Sub DBDagnr_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
OKButton_Click
End If
End Sub
'Public Function Zoeken(ZoekWaarde, ZoekSheet, LaatsteCellVoorZoeken, KolomVoorZoeken As String)
'It is good programming practise to declare the variable types of the arguments and return
'It shows what is expected there, making it easier to understand.
'maybe you think that Dim a,b,c as String means a,b and c are strings. That's not true.
'a and b have no vartype so they are typed as Variant
Public Function Zoeken(ZoekWaarde As String, ZoekSheet As String, _
LaatsteCellVoorZoeken As String, KolomVoorZoeken As String) As Long
'De volgende routine creeërt een functie en zoekt een ingegeven string van onderen naar boven in de tabel (zodat de meest recente wordt gevonden).
'Vervolgens wordt het Regelnummer (Rownumber) teruggemeld als gevonden waarde.
Dim StringRowNumber As Integer, LaatsteCellZoekVeld As Long, code As String
' ------ -------
'misleading name, plus make a habit of dim'ing row/column variables as Long.
With ThisWorkbook.Sheets(ZoekSheet)
LaatsteCellZoekVeld = .Range(LaatsteCellVoorZoeken, .Range(LaatsteCellVoorZoeken).End(xlUp)).Row
End With
'If ZoekWaarde = "" Then GoTo StopMetZoeken '<--- don't use GOTO !!
'don't say "if condition skip this", but "if negated condition do this"
Zoeken = 0 'The 'not found' Return value
If ZoekWaarde > "" Then '? why use this function with nothing to search for?
For StringRowNumber = LaatsteCellZoekVeld To 1 Step -1
code = ThisWorkbook.Sheets(ZoekSheet).Range(KolomVoorZoeken & StringRowNumber)
If code = ZoekWaarde Then
Zoeken = StringRowNumber
Exit For
End If
Next
End If
End Function
Public Function ZoekenBNO(ZoekWaarde, ZoekSheet, EersteCellVoorZoeken, LaatsteCellVoorZoeken, KolomVoorZoeken As String)
'De volgende routine creeërt een functie en zoekt een ingegeven string van boven naar onderen in de tabel (zodat de eerste wordt gevonden).
'Vervolgens wordt het Regelnummer (Rownumber) teruggemeld als gevonden waarde.
Dim StringRowNumber As Integer, EersteCellZoekVeld As String, LaatsteCellZoekVeld As String, code As String
EersteCellZoekVeld = ThisWorkbook.Sheets(ZoekSheet).Range(EersteCellVoorZoeken).Row
LaatsteCellZoekVeld = ThisWorkbook.Sheets(ZoekSheet).Range(LaatsteCellVoorZoeken, ThisWorkbook.Sheets(ZoekSheet).Range(LaatsteCellVoorZoeken).End(xlUp)).Row
If ZoekWaarde = "" Then GoTo StopMetZoeken
For StringRowNumber = EersteCellZoekVeld To LaatsteCellZoekVeld Step 1
code = ThisWorkbook.Sheets(ZoekSheet).Range(KolomVoorZoeken & StringRowNumber)
If code = ZoekWaarde Then
ZoekenBNO = StringRowNumber
Exit For
End If
Next
StopMetZoeken:
End Function
Public Function ZoekenDAGONB(ZoekWaarde, ZoekSheet, EersteCellVoorZoeken, LaatsteCellVoorZoeken, KolomVoorZoeken As String)
'De volgende routine creeërt een functie en zoekt een ingegeven string van onderen naar boven in de tabel (zodat de eerste wordt gevonden).
'Vervolgens wordt het Regelnummer (Rownumber) teruggemeld als gevonden waarde.
Dim StringRowNumber As Integer, EersteCellZoekVeld As String, LaatsteCellZoekVeld As String, code As String
EersteCellZoekVeld = ThisWorkbook.Sheets(ZoekSheet).Range(EersteCellVoorZoeken).Row
LaatsteCellZoekVeld = ThisWorkbook.Sheets(ZoekSheet).Range(LaatsteCellVoorZoeken).Row
If ZoekWaarde = "" Then GoTo StopMetZoeken
For StringRowNumber = LaatsteCellZoekVeld To EersteCellZoekVeld Step -1
code = ThisWorkbook.Sheets(ZoekSheet).Range(KolomVoorZoeken & StringRowNumber)
If code = ZoekWaarde Then
ZoekenDAGONB = StringRowNumber
Exit For
End If
Next
StopMetZoeken:
End Function
Public Function ZoekenDAGBNO(ZoekWaarde, ZoekSheet, EersteCellVoorZoeken, LaatsteCellVoorZoeken, KolomVoorZoeken As String)
'De volgende routine creeërt een functie en zoekt een ingegeven string van boven naar onderen in de tabel (zodat de eerste wordt gevonden).
'Vervolgens wordt het Regelnummer (Rownumber) teruggemeld als gevonden waarde.
Dim StringRowNumber As Integer, EersteCellZoekVeld As String, LaatsteCellZoekVeld As String, code As String
EersteCellZoekVeld = ThisWorkbook.Sheets(ZoekSheet).Range(EersteCellVoorZoeken).Row
LaatsteCellZoekVeld = ThisWorkbook.Sheets(ZoekSheet).Range(LaatsteCellVoorZoeken).Row
If ZoekWaarde = "" Then GoTo StopMetZoeken
For StringRowNumber = EersteCellZoekVeld To LaatsteCellZoekVeld Step 1
code = ThisWorkbook.Sheets(ZoekSheet).Range(KolomVoorZoeken & StringRowNumber)
If code = ZoekWaarde Then
ZoekenDAGBNO = StringRowNumber
Exit For
End If
Next
StopMetZoeken:
End Function