Membuat Form Input Data Siswa Plus Foto Menggunakan Ms. Excel (Macro VBA)
Assalamu'alaikum Wr. Wb.
Salam sejahtera untuk kita semua, sudah cukup lama Saya tidak mengupdate Postingan Blog Saya ini (Mas Operator). Dan pada kesempatan kali ini Saya akan membagikan sebuah tutorial sederhana mengenai Aplikasi Ms. Excel. Sesuai dengan judul Postingan ini, yakni "Membuat Form Input Data Seiswa Plus Foto". Pada contoh Saya akan memanfaatkan fitur Macro VBA yang ada pada Ms. Excel guna memberikan kesan Profesional pada hasil akhirnya nanti.
Tutorial kali ini Saya mengadaptasi dari sebuah postingan dari Website salah satu Master Excel Indonesia yakni : www.senbakusen.com, dan sekarang kita mulai saja tutorialnya :
1. Buka Ms. Excel 2007 kemudian Ubah Nama Sheet 1 menjadi DATABASE
2. Pada sheet DATABASE, isi dengan sebuah header tabel yang berisi data sebagai berikut :
- Pada kolom A1 isi dengan NO
- Pada kolom B1 isi dengan NIS
- Pada kolom C1 isi dengan NISN
- Pada kolom D1 isi dengan NAMA SISWA
- Pada kolom E1 isi dengan JENIS KELAMIN
- Pada kolom F1 isi dengan TEMPAT LAHIR
- Pada kolom G1 isi dengan TANGGAL LAHIR
- Pada kolom H1 isi dengan BULAN
- Pada kolom I1 isi dengan TAHUN
- Pada kolom J1 isi dengan AGAMA
- Pada kolom K1 isi dengan KELAS
- Pada kolom L1 isi dengan ALAMAT
- Pada kolom M1 isi dengan NAMA AYAH
- Pada kolom N1 isi dengan PEKERJAAN AYAH
- Pada kolom O1 isi dengan NAMA IBU
- Pada kolom P1 isi dengan PEKERJAAN IBU
- Pada kolom Q1 isi dengan PATH (ini untuk meletakkan source Gambar/Foto)
Hasilnya akan seperti gambar di bawah ini :
2. Selanjutnya kita buka halaman VBA Excelnya dengan cara tekan tombol Alt+F11 pada keyboard, atau klik pada menu DEVELOPER, kemudian klik pada Menu Visual Basic, maka akan tampil lembar VBA Excel.
3. Klik Menu Insert dan pilih Userform, dan ganti nama userform1 menjadi frmInput, dan ubah Captionnya menjadi .:: FORM INPUT/EDIT DATA SISWA ::. atau Bebas sesuai dengan keinginan masing-masing.
Silahkan atur mulai dari ukuran dan warna background (sesuaikan dengan selera masing-masing).
4. Sisipkan beberapa komponen yang dibutuhkan, seperti Label, TextBox, Frame, Image, ComboBox, OptionButton, dan CommandButton, dan atur sehingga menjadi seperti gambar di bawah ini :
5. Ubah nama dari masing-masing komponen (TextBox, Frame, Image, ComboBox, OptionButton, dan CommandButton).
TEXTBOX
pada TextBox yang akan menjadi isian NIS ubah namanya menjadi txtNIS, TextBox untuk isian NISN ubah menjadi txtNISN, TextBox untuk isian Nama siswa ubah menjadi txtNama, ubah TextBox untuk isian Tahun lahir menjadi txtTahun, ubah TextBox untuk isian Tahun menjadi txtTahun, TextBox untuk isian Agama ubah menjadi txtAgama, ubah TextBox untuk isian Alamat menjadi txtAlamat, ubah TextBox untuk isian Nama Ayah menjadi txtAyah, ubah TextBox untuk isian Pekerjaan Ayah menjadi txtPkrAyah, ubah TextBox untuk isian Nama Ibu menjadi txtIbu, dan ubah TextBox untuk isian Pekerjaan Ibu menjadi txtPkrIbu.
OPTION BUTTON
Ubah Caption OptionButton 1 menjadi Laki-Laki dan ubah juga Namanya menjadi opt1
Ubah Caption OptionButton 2 menjadi Perempuan dan ubah juga Namanya menjadi opt2
COMBOBOX
ComboBox ini akan digunakan sebagai penampilkan data Tanggal Lahir, Bulan Lahir, dan Kelas. Dan untuk isian dari masing-masing Combox tersebut saya mengambilnya dari sebuah Range Dinamis yang saya buat di Sheet2, dan Saya juga mengubah nama Sheet 2 menjadi LOG, untuk membuat range dinamis, berikut langkah-langkahnya :
Buka Sheet2 (yang sudah diubah namanya menjadi LOG), kemudian pada kolom A1 sampai A31 tulis data yang isinya adalah 01 sampai dengan 31 (untuk isian tanggal). Dan pada kolom B1 sampai B12 isikan data nama bulan, dari Januari sampai dengan Desember (untuk isian Bulan), kemudian pada kolom C1 sampai dengan C6 isikan data I sampai dengan VI (untuk isian kelas), maka akan seperti pada gambar berikut ini :
Kemudian untuk membuat Range Dinamis lakukan seperti berikut :
1. Untuk membuat Range Dinamis Isian Tanggal :
Klik pada menu Formula kemudian klik Menu Name Manager,
=OFFSET(LOG!$A$1;0;0;COUNTA(LOG!$A:$A);1)
2. Untuk isian Bulan sama seperti di atas, hanya pada Name tuliskan Bulan dan tuliskan rumus di bawah ini untuk mengisi isian Refer to :
=OFFSET(LOG!$B$1;0;0;COUNTA(LOG!$B:$B);1)
3. Untuk Kelas pada Name tuliskan Kelas, dan Kodenya adalah :
=OFFSET(LOG!$C$1;0;0;COUNTA(LOG!$C:$C);1)
Untuk Nama ComboBox, ubah menyesuaikan fungsi ComboBox masing-masing, untuk ComboBox yang berisi data tanggal ubah menjadi cbTanggal, untuk Bulan ubah menjadi cbBulan, dan untuk data kelas ubah menjadi cbKelas.
FRAME
Untuk frame, disini Saya menggunakannya hanya untuk pemanis, jadi sesuaikan dengan selera masing-masing, pada contoh saya hanya mengubah Captionnya saja menjadi Foto Siswa.
IMAGE
Untuk Image disini Saya menggunakan dua Image, pertama sisipkan Image sehingga otomatis namanya adalah Image1 kemudian saya men-Copy menjadi Image2, pada Image1 isikan sebuah gambar yang akan dijadikan tampilan jika belum ada foto Siswa yang disisipkan, kemudian tempatkan Image2 persis didepan Image1 sehingga Image1 tertutup oleh Image2. Dan untuk Image2 ini jangan sisipkan gambar seperti pada Image1, biarkan saja apa adanya yang penting posisi Image2 menutupi posisi Image1.
COMMANDBUTTON
Untuk CommandButton ubah nama dan captionnya sesuai dengan fungsinya masing-masing juga, untuk CommandButton Simpan ubah namanya menjadi cmdSimpan, dan captionnya ubah menjadi SIMPAN, untuk CommandButton Batal ubah namanya menjadi cmdBatal dan captionnya menjadi BATAL, CommandButton untuk Upload Foto ubah namanya menjadi cmdFoto dan captionnya menjadi + FOTO, dan untuk COmmandButton Keluar ubah namanya menjadi cmdKeluar dan captionnya menjadi KELUAR.
Langkah berikutnya, merupakan langkah dimana kita akan menyisipkan CODE MACRO agar userfom dan komponen-komponen pendukungnya dapat berfungsi sesuai dengan harapan. Dan berikut langkah-langkahnya :
1. Untuk Userform (namanya diubah menjadi frmInput)
double klik pada Userform, kemudian Copy dan Paste semua Kode di bawah ini ke dalamnya :
'Mas Operator : https://www.masoperator.blogspot.com
Private Declare Function FindWindow _
Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong _
Lib "user32" Alias "GetWindowLongA" _
(ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong _
Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Const WS_SYSMENU = &H80000
Const GWL_STYLE = (-16)
Private Sub UserForm_Initialize()
Tampilphoto
End Sub
Private Sub UserForm_Activate()
On Error Resume Next
MkDir ThisWorkbook.path & "\" & "PHOTO" & "\"
On Error GoTo 0
Dim hwnd, lStyle As Long
hwnd = FindWindow("ThunderDFrame", Me.Caption)
lStyle = GetWindowLong(hwnd, GWL_STYLE)
SetWindowLong hwnd, GWL_STYLE, lStyle And Not WS_SYSMENU
End Sub
'https://www.masoperator.blogspot.com/
Sub Tampilphoto()
frmInput.Image2.Picture = frmInput.Image1.Picture
End Sub
2. Untuk CommandButton SIMPAN (cmdSimpan) double klik dan copas semua Kode ini kedalamnya :
'https://masoperator.blogspot.com
Private Sub cmdSimpan_Click()
On Error Resume Next
Dim iRow As Long
Dim Ws As Worksheet
Dim path As String
Set Ws = Worksheets("DATABASE")
path = ThisWorkbook.path & "\" & "PHOTO" & "\"
'Auto Number
iRow = Ws.Cells(Rows.Count, 1) _
.End(xlUp).Offset(1, 0).Row
'NIS, NISN, Nama Tidak boleh kosong
If Me.txtNIS.Value = "" Or Me.txtNISN.Value = "" Or Me.txtNama.Value = "" Or Me.txtAyah.Value = "" Or Me.txtIbu.Value = "" Then
Me.txtNIS.SetFocus
MsgBox "Mohon lengkapi semua data!!!", vbCritical, ".:: INFO ::."
Exit Sub
End If
'Cegah NIS Ganda
If WorksheetFunction.CountIf(Ws.Range("B2", Ws.Cells(iRow, 1)), Me.txtNIS.Value) > 0 Then
MsgBox "NIS sudah ada, Mohon cek kembali!!!", vbCritical, ".:: INFO ::."
Exit Sub
End If
Ws.Cells(iRow, 1).Value = "=Row()-1"
Ws.Cells(iRow, 2).Value = "'" & Me.txtNIS.Value
Ws.Cells(iRow, 3).Value = "'" & Me.txtNISN.Value
Ws.Cells(iRow, 4).Value = Me.txtNama.Value
If opt1.Value = True Then
Ws.Cells(iRow, 5).Value = "Laki-Laki"
End If
If opt2.Value = True Then
Ws.Cells(iRow, 5).Value = "Perempuan"
End If
Ws.Cells(iRow, 6).Value = Me.txtTempat.Value
Ws.Cells(iRow, 7).Value = "'" & Me.cbTanggal.Value
Ws.Cells(iRow, 8).Value = Me.cbBulan.Value
Ws.Cells(iRow, 9).Value = Me.txtTahun.Value
Ws.Cells(iRow, 10).Value = Me.txtAgama.Value
Ws.Cells(iRow, 11).Value = Me.cbKelas.Value
Ws.Cells(iRow, 12).Value = Me.txtAlamat.Value
Ws.Cells(iRow, 13).Value = Me.txtAyah.Value
Ws.Cells(iRow, 14).Value = Me.txtPkrAyah.Value
Ws.Cells(iRow, 15).Value = Me.txtIbu.Value
Ws.Cells(iRow, 16).Value = Me.txtPkrIbu.Value
Ws.Cells(iRow, 17).Value = path & frmInput.txtNIS.Value & ".jpg"
SavePicture frmInput.Image2.Picture, path & frmInput.txtNIS.Value & ".jpg"
MsgBox "Data Berhasil Diinput", 64, ".:: INFO ::."
Call cmdBatal_Click
End Sub
3. CommadButton BATAL (cmdBatal) double klik dan copas semua Kode dibawah ini kedalamnya :
Private Sub cmdBatal_Click()
Me.txtNIS.Value = ""
Me.txtNISN.Value = ""
Me.txtNama.Value = ""
Me.opt1.Value = "False"
Me.opt2.Value = "False"
Me.txtTempat.Value = ""
Me.cbTanggal.Value = ""
Me.cbBulan.Value = ""
Me.txtTahun.Value = ""
Me.txtAgama.Value = ""
Me.cbKelas.Value = ""
Me.txtAlamat.Value = ""
Me.txtAyah.Value = ""
Me.txtPkrAyah.Value = ""
Me.txtIbu.Value = ""
Me.txtPkrIbu.Value = ""
Call Tampilphoto
End Sub
4. CommandButton + FOTO (cmdFoto) double klik dan copas semua Kode dibawah ini kedalamnya :
'https://masoperator.blogspot.com
Private Sub cmdFoto_Click()
On Error Resume Next
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.ButtonName = "Insert"
.Title = "Pilih File Foto"
.Filters.Add "Format", "*.gif; *.jpg; *.jpeg", 1
If .Show = -1 Then
frmInput.Image2.PictureSizeMode = fmPictureSizeModeStretch
frmInput.Image2.Picture = LoadPicture(.SelectedItems(1))
Else
End If
End With
End Sub
5. CommandButton KELUAR (cmdKeluar) double klik pada cmdKeluar kemudian copas semua Kode dibawah ini kedalamnya :
Kelebihan dari teknik ini adalah file tidak akan menjadi berat/besar ukurannya, karena gambar (foto siswa) tidak disipkan langsung ke dalam file, namun akan dicopy ke dalam folder yang bernama PHOTO yang akan muncul dengan sendirinya jika pada folder file ini disimpan tidak ada folder yang bernama PHOTO.
Hasil akhirnya adalah seperti gambar animasi di bawah ini :
Untuk lebih jelasnya bisa Anda download file contohnya untuk dipelajari melalui link di bawah ini :
Demikian, terimakasih dan semoga bermanfaat.
Wassalamu'alaikum Wr. Wb.
Salam Mas Operator!!!
Private Sub cmdKeluar_Click()
If MsgBox("Anda yakin ingin keluar???", vbInformation + vbYesNo, ".:Konfirmasi:.") = vbYes Then
Unload Me
End If
End Sub
Kelebihan dari teknik ini adalah file tidak akan menjadi berat/besar ukurannya, karena gambar (foto siswa) tidak disipkan langsung ke dalam file, namun akan dicopy ke dalam folder yang bernama PHOTO yang akan muncul dengan sendirinya jika pada folder file ini disimpan tidak ada folder yang bernama PHOTO.
Hasil akhirnya adalah seperti gambar animasi di bawah ini :
Untuk lebih jelasnya bisa Anda download file contohnya untuk dipelajari melalui link di bawah ini :
Contoh Hasil Jadinya: --->>> KLIK DISINI
Demikian, terimakasih dan semoga bermanfaat.
Wassalamu'alaikum Wr. Wb.
Salam Mas Operator!!!
pengen ngulik buat iseng-iseng kalau lagi gabut, tapi file downloadnya dah keburu hilang om
ReplyDelete@ihsan :emang iya yak Mas? waduh,.. :D jarang ngecek soale aq
ReplyDeleteBisa di upload ulang mas?
ReplyDeletesudah mas :)
Delete