Option Explicit
Private myList
Private Sub Userform_Initialize()
Dim myWeek As Long, cn As Object, rs As Object, x, myDir As String
Sheets("results").Range("b5:b10,e6,c7:d8").ClearContents
myWeek = WorksheetFunction.WeekNum(Date)
myDir = ThisWorkbook.Path '<---change the folder path for "master.xlsx", if needed
With wkcombo
.List = Sheets("Week").Range("a2:A53").Value
.ListIndex = myWeek - 1
End With
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
With cn
.Provider = "Microsoft.Ace.OLEDB.12.0"
.Properties("Extended Properties") = "Excel 12.0;HDR=Yes;"
.Open myDir & "\example.xlsx"
End With
rs.Open "Select Distinct `Operator Name` From `Raw$` Where `Operator Name` Is Not Null;", cn, 3
If rs.RecordCount Then
x = rs.GetRows: Me.nmcomb.Column = x
End If
rs.Close
rs.Open "Select `Operator Name`, `Date`, `Y/N`, `Id Number` From `Raw$` Where " & _
"`Operator Name` Is Not Null Order By `ID Number`", cn, 3 '<-- changed
If rs.RecordCount Then myList = rs.GetRows
Set cn = Nothing: Set rs = Nothing
End Sub
Private Sub Search_Click()
Dim myName As String, sDate As Date, eDate As Date
Dim i As Long, x(1 To 2, 1 To 3) As Long, FDate As Date
If IsEmpty(myList) Then MsgBox "No data in Database", vbCritical: Exit Sub
myName = Me.nmcomb.Value
With Sheets("week")
sDate = Application.VLookup(Me.wkcombo.Value, .Range("a2:c53"), 2, False)
eDate = Application.VLookup(Me.wkcombo.Value, .Range("a2:c53"), 3, False)
FDate = .[b2]
End With
For i = 0 To UBound(myList, 2)
If myList(0, i) = myName Then
If (myList(1, i) >= FDate) * (myList(1, i) <= Date) Then
If LCase$(myList(2, i)) = "y" Then
x(1, 3) = x(1, 3) + 1
Else
x(2, 3) = x(2, 3) + 1
End If
End If
If (myList(1, i) >= sDate) * (myList(1, i) <= eDate) Then
If LCase$(myList(2, i)) = "y" Then
x(1, 1) = x(1, 1) + 1
Else
x(2, 1) = x(2, 1) + 1
End If
ElseIf (myList(1, i) >= sDate - 7) * (myList(1, i) <= eDate - 7) Then
If LCase$(myList(2, i)) = "y" Then
x(1, 2) = x(1, 2) + 1
Else
x(2, 2) = x(2, 2) + 1
End If
End If
End If
Next
With Sheets("results")
.Range("b5:b6").Value = Application.Transpose(Array(Me.nmcomb.Value, Me.wkcombo.Value))
.Range("b7:d8").Value = x
.Range("e6") = Left(myList(3, UBound(myList, 2)), 1) & Val(Mid$(myList(3, UBound(myList, 2)), 2)) + 1
End With
End Sub
Private Sub Cancel_Click()
Unload Me
End Sub
Bookmarks