Kako sam razumeo forma bi mogla da izgleda kao u prilogu. Forma sadrži:
1. Datumsku kontrolu, koja standardno prikazuje tekući datum i korisnik može da promeni datum. Datumska kontrola treba da prikaže i dane u nedelji kako bi se lakše indentifikovo rad nedeljom.
2. Lista za izbor radnika, sa dve kolone broj radnika i ime i prezime. Lista treba da omogući istovremeni izbor više radnika kako bi se obezbedio što efikasniji unos u slučajevima kad se ista vrsta rada bira za grupu radnika (npr. 8 sati, prva smena)
3. Spin kontrola za unos sati rada – standardno postavljena na 8.
4. Combo box za izbor vrste rada - prva smena, druga smena, rad na praznik itd.
5. Dugmad OK i Cancel
Klikom na OK uneseni podaci se prenose na evidencionu listu – jedan red sadrži jednu kombinaciju radnik/datum/vrsta rada.
Da kreiraš novu formu pokreni Insert -> User Forms iz VB editora, pa iz toolbox-a prevuci odgovarajuće kontrole na formu. Spin kontrolu formiraćeš od od text-box kontrole i spin button kontrole. Kontrola date-time standardno se ne nalazi na listi kontrola u toolboxu, pa je treba ubaciti preko Additional controls iz konteksnog menija Toolbox-a, selektuj Microsoft Date and Time Picker Control.
Nakon što si rasporedila kontrole na formi, podesi svojstsva kontrola:
Nazi forme – svojstvo Name: frmUnos
Za data-time kontrolu podesi da prikazuje dane u nedelji.
CustomFormat: ddd, dd.MM.yyyy i
Format: 3dtpCustom
Za listu postavi:
RowSource: Spisak, gde je Spisak imenovani opseg sa listom zaposlenih (dve kolone: Broj i Ime i Prezime)
ColumnCount: 2
ColumnWidths: 49.95 pt;160 pt
Za combo box vrstu posla postavi:
Name: cmbVrsta
RowSource: VrsteR, gde je VrsteR imenovani opseg sa listom vrsta poslova.
Value: prva smena (to će biti default vrednost)
Tekst box za sate:
Name: txtSati
Value: 8 (to će biti default vrednost)
Događaje Up Down spin dugmeta programiraj tako da uvećaju/umanje vrednost u tekst boksu za sate. U kod prozoru forme unesi:
Code:
Private Sub SpinButton1_SpinDown()
Me.txtSati.Value = Me.txtSati.Value - 1
End Sub
Private Sub SpinButton1_SpinUp()
Me.txtSati.Value = Me.txtSati.Value + 1
End Sub
Na kraju za događaj klik dugmeta OK postavi kod koji vrši upis podataka (kod prozor forme):
Code:
Private Sub cmdOK_Click()
Dim rw As Long
Dim sh As Worksheet
Dim i As Integer
Set sh = ActiveWorkbook.Worksheets("Lista")
rw = sh.Range("A65535").End(xlUp).Row + 1 'sledeci red za upis
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(i) Then ' ako je selektovan upisi
sh.Cells(rw, 1) = Me.ListBox1.List(i, 0)
sh.Cells(rw, 2) = Me.ListBox1.List(i, 1)
sh.Cells(rw, 3) = Me.DTPicker1.Value
sh.Cells(rw, 4) = Me.txtSati.Value
sh.Cells(rw, 5) = Me.cmbVrsta.Value
sh.Cells(rw, 6) = Weekday(Me.DTPicker1.Value, vbMonday)
rw = rw + 1
End If
End If
Next i
Me.Hide
End Sub
A za događaj klik dugmenta Cancel jednostavno izlazak iz forme:
Code:
Private Sub cmdCancel_Click()
Me.Hide
End Sub
Za testiranje ovog rešenja napravi proceduru proceduru
Code:
Sub Test()
Load frmUnos
frmUnos.Show
End Sub
Ovo je samo početak. Nakon toga treba ugraditi u kod posebne postupke u slučaju da je izabrana treća smena u subotu ili treća smena u nedelju – onda u listu upisati dva reda za svakog radnika jedan red sa 2 sata a drugi sa 6 sati ...
Iz evidencione liste možeš dobiti tabelu u obliku kakav si koristila pomoću (nekakvih) formula ili istovremeno prilikom upisa u evidencionu listu upisati i odgovarajuće podatke u tvoju tabelu (lošije rešenje). Rekapitulacije mislim da ćeš lakše napraviti iz ovakve liste.
Nije to loše Rembrante, samo što ne bi dodao još malo boje?