Kesalahan di UserForm Login

  1. 6 minggu lalu

    Dear all master VBA Excel, terutama mas @Caton dan @manweljs_ saya kembali mau bertanya nih. Saya belajar membuat form login yang caranya sudah mengikuti langkah2 yg diajarkan di forum ini juga. Tp ada masalah ketika form itu mau saya gunakan di antaranya:

    1. Jika saya klik Cancel maka muncul dialog box simpan perubahan atau tidak, tp saya maunya tidak muncul dialog box itu
    2. Jika saya klik Close(X), maka otomatis langsung login, ini berarti sia2 donk form login saya
    3. Tetapi jika saya login dengan benar maka muncul Login Sukses tapi malah justru excel saya tidak terbuka

    Bagaimana agar jika saya klik Close(X) maupun Cancel langsung batal login aja tapi tanpa dialog box simpan perubahan, sedangkan jika saya login dengan benar harapanya saya bisa masuk ke aplikasi excel saya. Mungkin bisa diperiksa kesalahan script saya dimana.
    Adapun kode form saya begini:
    Private Sub CmdLogin_Click()
    Set sh = Sheets("FORM")
    If TxtUser.Value = "" Then
    MsgBox "Silahkan Masukkan User Name", _
    vbExclamation + vbOKOnly, "Blank User Name"
    TxtUser.SetFocus
    Exit Sub
    ElseIf TxtPswd.Value = "" Then
    MsgBox "Silahkan Masukkan Password", _
    vbExclamation + vbOKOnly, "Blank Password"
    TxtPswd.SetFocus
    Exit Sub
    ElseIf TxtUser.Value <> sh.Range("v2").Value Then
    MsgBox "User Name Salah/Tidak Terdaftar", _
    vbCritical + vbOKOnly, "Error User Name"
    TxtUser.SetFocus
    Exit Sub
    ElseIf TxtPswd.Value <> sh.Range("v3").Value Then
    MsgBox "Password Salah, Silahkan ulangi lagi", _
    vbCritical + vbOKOnly, "Error Password"
    TxtPswd.SetFocus
    Exit Sub
    End If
    MsgBox "Selamat Anda berhasil Login", _
    vbInformation + vbOKOnly, "Login Sukses"
    End
    Sheets("FORM").Activate
    End Sub
    Private Sub CmdCancel_Click()
    ThisWorkbook.Application.Quit
    End Sub

    Sedangkan di Thisworkbook saya begini:
    Private Sub Workbook_Open()
    Application.Visible = False
    Realpict.Show
    Application.Visible = True
    End Sub
    Mohon bantuannya. Terima kasih.

    Mas @Tri Mahardika ...

    ... Jika saya klik Cancel maka muncul dialog box simpan perubahan atau tidak, tp saya maunya tidak muncul dialog box itu ...

    Script berikut dapat digunakan untuk menghilangkan DialogBox:

    Application.DisplayAlerts = False

    ... Jika saya klik Close(X), maka otomatis langsung login, ini berarti sia2 donk form login saya ...

    Gunakan script seperti untuk membatalkan Close (X):

    If CloseMode = vbFormControlMenu Then
       Cancel = True
    End If

    atau gunakan script seperti untuk menutup Workbook:

    If CloseMode = vbFormControlMenu Then
       Application.DisplayAlerts = False
       ThisWorkbook.Close
    End If

    ... Tetapi jika saya login dengan benar maka muncul Login Sukses tapi malah justru excel saya tidak terbuka ...

    Pada baris script berikut:

    Private Sub CmdLogin_Click()
       Set sh = Sheets("FORM")
       If TxtUser.Value = "" Then
          ...
       ElseIf TxtPswd.Value = "" Then
          ...
       ElseIf TxtUser.Value <> sh.Range("v2").Value Then
          ...
       ElseIf TxtPswd.Value <> sh.Range("v3").Value Then
          Exit Sub
       End If
    
       MsgBox "Selamat Anda berhasil Login", _
          vbInformation + vbOKOnly, "Login Sukses"
       End
       Sheets("FORM").Activate
    End Sub

    Pada potongan script di atas, yang menjadi masalah adalah baris:

    ...
    End
    ...

    Perintah tersebut akan mengakhiri (Terminate) seluruh proses macro yang sedang berjalan. Coba modifikasi scriptnya seperti berikut:

    Private Sub CmdLogin_Click()
        Dim bSukses As Boolean
        
        Set sh = Sheets("FORM")
    
        bSukses = False
        If TxtUser.Value = "" Then
            MsgBox "Silahkan Masukkan User Name", _
                vbExclamation + vbOKOnly, "Blank User Name"
            TxtUser.SetFocus
        ElseIf TxtPswd.Value = "" Then
            MsgBox "Silahkan Masukkan Password", _
                vbExclamation + vbOKOnly, "Blank Password"
            TxtPswd.SetFocus
        ElseIf TxtUser.Value <> sh.Range("v2").Value Then
            MsgBox "User Name Salah/Tidak Terdaftar", _
                vbCritical + vbOKOnly, "Error User Name"
            TxtUser.SetFocus
        ElseIf TxtPswd.Value <> CStr(sh.Range("v3").Value) Then
            MsgBox "Password Salah, Silahkan ulangi lagi", _
                vbCritical + vbOKOnly, "Error Password"
            TxtPswd.SetFocus
        Else
            MsgBox "Selamat Anda berhasil Login", _
                vbInformation + vbOKOnly, "Login Sukses"
            bSukses = True
        End If
        
        If bSukses Then
            Sheets("FORM").Activate
            Unload Me
        End If
    End Sub
    
    Private Sub CmdCancel_Click()
        Application.DisplayAlerts = False
        ThisWorkbook.Close
    End Sub
    
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
        If CloseMode = vbFormControlMenu Then
            Cancel = True
            '+-- Atau gunakan perintah berikut untuk menutup Workbook:
            'Call CmdCancel_Click
        End If
    End Sub

    Demikian, semoga sesuai.

  2. Caton

    Agu 14 Terverifikasi Jawaban Terpilih Indonesia + 11.512 Poin

    Mas @Tri Mahardika ...

    ... Jika saya klik Cancel maka muncul dialog box simpan perubahan atau tidak, tp saya maunya tidak muncul dialog box itu ...

    Script berikut dapat digunakan untuk menghilangkan DialogBox:

    Application.DisplayAlerts = False

    ... Jika saya klik Close(X), maka otomatis langsung login, ini berarti sia2 donk form login saya ...

    Gunakan script seperti untuk membatalkan Close (X):

    If CloseMode = vbFormControlMenu Then
       Cancel = True
    End If

    atau gunakan script seperti untuk menutup Workbook:

    If CloseMode = vbFormControlMenu Then
       Application.DisplayAlerts = False
       ThisWorkbook.Close
    End If

    ... Tetapi jika saya login dengan benar maka muncul Login Sukses tapi malah justru excel saya tidak terbuka ...

    Pada baris script berikut:

    Private Sub CmdLogin_Click()
       Set sh = Sheets("FORM")
       If TxtUser.Value = "" Then
          ...
       ElseIf TxtPswd.Value = "" Then
          ...
       ElseIf TxtUser.Value <> sh.Range("v2").Value Then
          ...
       ElseIf TxtPswd.Value <> sh.Range("v3").Value Then
          Exit Sub
       End If
    
       MsgBox "Selamat Anda berhasil Login", _
          vbInformation + vbOKOnly, "Login Sukses"
       End
       Sheets("FORM").Activate
    End Sub

    Pada potongan script di atas, yang menjadi masalah adalah baris:

    ...
    End
    ...

    Perintah tersebut akan mengakhiri (Terminate) seluruh proses macro yang sedang berjalan. Coba modifikasi scriptnya seperti berikut:

    Private Sub CmdLogin_Click()
        Dim bSukses As Boolean
        
        Set sh = Sheets("FORM")
    
        bSukses = False
        If TxtUser.Value = "" Then
            MsgBox "Silahkan Masukkan User Name", _
                vbExclamation + vbOKOnly, "Blank User Name"
            TxtUser.SetFocus
        ElseIf TxtPswd.Value = "" Then
            MsgBox "Silahkan Masukkan Password", _
                vbExclamation + vbOKOnly, "Blank Password"
            TxtPswd.SetFocus
        ElseIf TxtUser.Value <> sh.Range("v2").Value Then
            MsgBox "User Name Salah/Tidak Terdaftar", _
                vbCritical + vbOKOnly, "Error User Name"
            TxtUser.SetFocus
        ElseIf TxtPswd.Value <> CStr(sh.Range("v3").Value) Then
            MsgBox "Password Salah, Silahkan ulangi lagi", _
                vbCritical + vbOKOnly, "Error Password"
            TxtPswd.SetFocus
        Else
            MsgBox "Selamat Anda berhasil Login", _
                vbInformation + vbOKOnly, "Login Sukses"
            bSukses = True
        End If
        
        If bSukses Then
            Sheets("FORM").Activate
            Unload Me
        End If
    End Sub
    
    Private Sub CmdCancel_Click()
        Application.DisplayAlerts = False
        ThisWorkbook.Close
    End Sub
    
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
        If CloseMode = vbFormControlMenu Then
            Cancel = True
            '+-- Atau gunakan perintah berikut untuk menutup Workbook:
            'Call CmdCancel_Click
        End If
    End Sub

    Demikian, semoga sesuai.

  3. Terima kasih banyak mas @Caton , udah saya ganti dengan script yg mas berikan dan berhasil. Hanya saja di sini jika saya klik Close(X) tidak berpengaruh apa2, Its okey sih karena udah aman intinya ga jadi login, tp kalo bisa fungsi Close(X) bisa seperti Cancel yaitu langsung keluar menghilangkan Form Login itu dan tanpa dialog box juga. Itu kalo bisa mas, kalo memang hal ini tidak memungkinkan di excel ya udah mas ini aja udah OKE Banget.. O ya, kok mas @Caton bisa pinter banget makanannya apa ya?he..he...
    Semoga sehat selalu mas, makin sering berbagi ilmunya dan semoga keluarga mas @Caton senantiasa diberikan kesehatan serta dilancarkan segala urusan dan rejekinya... Aamiin....

  4. Caton

    Agu 15 Terverifikasi Indonesia + 11.512 Poin

    Mas @Tri Mahardika ...

    ... kalo bisa fungsi Close(X) bisa seperti Cancel yaitu langsung keluar menghilangkan Form Login itu dan tanpa dialog box juga ...

    Mungkin ada yang terlewatkan saat mas membaca penjelasan saya berikut:

    atau gunakan script seperti untuk menutup Workbook:

    If CloseMode = vbFormControlMenu Then
       Application.DisplayAlerts = False
       ThisWorkbook.Close
    End If

    dan komentar dalam script yang saya lampirkan:

    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
        If CloseMode = vbFormControlMenu Then
            Cancel = True
            '+-- Atau gunakan perintah berikut untuk menutup Workbook:
            'Call CmdCancel_Click
        End If
    End Sub

    Jadi jika ingin menutup Workbook jika pengguna menekan tombol Close (x) dapat digunakan:

    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
        If CloseMode = vbFormControlMenu Then
            '+-- Atau gunakan perintah berikut untuk menutup Workbook,
            '+-- (memanggil dan mengeksekusi script pada prosedur
            '+-- CmdCancel_Click).
    
            Call CmdCancel_Click
        End If
    End Sub

    atau juga bisa secara langsung seperti berikut:

    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
        If CloseMode = vbFormControlMenu Then
            Application.DisplayAlerts = False
            ThisWorkbook.Close
        End If
    End Sub

    Semoga sehat selalu mas, makin sering berbagi ilmunya dan semoga keluarga mas @Caton senantiasa diberikan kesehatan serta dilancarkan segala urusan dan rejekinya... Aamiin....

    Allahumma Aamiin. Semoga kebaikan dan keberkahan yang sama dan lebih baik untuk mas @Tri Mahardika ... Aamiin.

  5. Jadi untuk memfungsikan tombol Close(X) sebagaimana Cancel tidak memungkinkan ya mas?

  6. Oh maaf ada yang terlewatkan lagi saya membacanya..

  7. Caton

    Agu 15 Terverifikasi Indonesia + 11.512 Poin

    @Tri Mahardika Oh maaf ada yang terlewatkan lagi saya membacanya..

    Terbalik ... eh ... Terbaik ... :D :D :D

  8. Alhamdulillah mas, berhasil.. Luar biasa mas @Caton . O ya, ini setiap diskusi bertambah poin. Untuk apa ya poin itu? Maklum baru beberapa hari join di sini.

  9. Caton

    Agu 15 Terverifikasi Indonesia + 11.512 Poin

    @Tri Mahardika ... Alhamdulillah mas, berhasil ...

    Alhamdulillah.

    @Tri Mahardika ... O ya, ini setiap diskusi bertambah poin. Untuk apa ya poin itu? ...

    Saya juga tidak tahu mas. Kita tunggu saja siapa tahu ada yang akan menginformasikannya ... ;) :)

  10. Satu lagi mas (satu lagi terus...he..he..) Agar klik login bisa lakukan juga dengan tekan tombol Enter gimana ya?

  11. Caton

    Agu 15 Terverifikasi Indonesia + 11.512 Poin
    Di sunting 6 minggu lalu oleh Caton

    @Tri Mahardika ... Agar klik login bisa lakukan juga dengan tekan tombol Enter gimana ya ...

    [1]. Kalau tombol dalam keadaan fokus (sedang aktif), maka menekan tombol Enter sama saja dengan menekan tombol dengan mouse. Coba letak kursor pada TextBox, lalu tekan tombol Enter beberapa kali. Lihat apa yang terjadi ...

    [2]. Mengubah properti Default dari tombol (CommandButton) menjadi True maka akan membuat tombol akan langsung menerima fokus saat tombol Enter ditekan dan langsung dieksekusi. Hal yang sama juga berlaku apabila properti Cancel dari tombol (CommandButton) menjadi True maka menekan tombol Esc akan membuat tombol tersebut fokus dan langsung dieksekusi.

    Screenshoot010.png

    Coba saja ubah properti Default dari tombol cmdLogin menjadi True dan ubah properti Cancel dari tombol cmdCancel menjadi True. Tekan tombol Enter untuk login, atau tekan tekan tombol Esc untuk membatalkan login ...

    Demikian.

  12. Mantapppp..... Terima kasih. Maaf banyak nanya mas, inipun saya baru belajar praktek langsung tanpa tau apa sih arti dari bahasa VBA. Maksudnya selama ini cuma nanya scriptnya bagaimana lalu tinggal saya contek. Padahal mgkn kalo ngerti arti dari bahasa VBA akan lbh paham dan bisa ngotak-atik sendiri. Mgkn lain kesempatan saya ingin belajar. Makasih mas.

  13. Caton

    Agu 15 Terverifikasi Indonesia + 11.512 Poin
    Di sunting 6 minggu lalu oleh Caton

    @Tri Mahardika ... Terima kasih ...

    Sama- sama mas @Tri Mahardika ... :)

    @Tri Mahardika ... Maaf banyak nanya mas ...

    Tidak apa-apa banyak bertanya mas, selama pertanyaannya jelas dan ada lampiran (jika diperlukan). Jika saya atau rekan-rekan lain di forum ini bisa menjawab dan membantu memberikan solusi, InsyaAllah kami usahakan...

    @Tri Mahardika ... Maksudnya selama ini cuma nanya scriptnya bagaimana lalu tinggal saya contek. Padahal mgkn kalo ngerti arti dari bahasa VBA akan lbh paham dan bisa ngotak-atik sendiri. Mgkn lain kesempatan saya ingin belajar ...

    Saya pribadi juga masih sering copas. Dari hasil copas tersebut dipelajari, dicoba dan dipahami. Salah dalam pemrograman, itu hal biasa. Kalau tidak tahu, saat ini sudah banyak sumber bacaan Excel dan VBA. Masih tidak mengerti, ya bertanya ... :)

    Terus mencoba dan mencoba ... Semoga suatu saat mas @Tri Mahardika bisa jadi master Excel + VBA. Aamiin ... ;)

 

atau Mendaftar untuk ikut berdiskusi!