Proteksi baris warna excel dengan koding vba

  1. 3 minggu lalu

    Salam kenal,
    mohon pencerahan tentang koding vba excel yang error waktu di proteksi sel nya dan dibawah ini file nya

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim rowNumberValue As Integer, columnNumberValue As Integer, i As Integer, j As Integer
    Cells.Interior.ColorIndex = 0
    rowNumberValue = ActiveCell.Row
    columnNumberValue = ActiveCell.Column
    For i = 1 To rowNumberValue
    Cells(i, columnNumberValue).Interior.ColorIndex = 0
    Next i
    For j = 1 To columnNumberValue
    Cells(rowNumberValue, j).Interior.ColorIndex = 37
    Next j
    End Sub

    debug kesalahan pada Cells.Interior.ColorIndex = 0 karena diproteksi

  2. Caton

    Sep 27 Terverifikasi Indonesia + 14.596 Poin

    @mraikarzf ...

    Normalnya, saat kita memproteksi sebuah sheet secara manual, maka VBA akan memproteksi sheet terkait dalam 2 hal utama, dari sisi User Interface (yang ditampilkan atau yang terlihat) dan dari sisi macro VBA. Pada saat melakukan perubahan terhadap sebuah sheet yang terproteksi secara manual, baik perubahan secara manual maupun melalui perintah macro VBA akan gagal.

    Cara pertama yang bisa dilakukan melalui macro VBA adalah dengan membuka proteksi lalu menguncinya kembali. Misalkan saja:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Dim rowNumberValue As Integer, columnNumberValue As Integer, i As Integer, j As Integer
    
        '+--- Buka proteksi.
        Me.Unprotect Password:="rahasia"
    
        Cells.Interior.ColorIndex = 0
        rowNumberValue = ActiveCell.Row
        columnNumberValue = ActiveCell.Column
        For i = 1 To rowNumberValue
            Cells(i, columnNumberValue).Interior.ColorIndex = 0
        Next i
        For j = 1 To columnNumberValue
            Cells(rowNumberValue, j).Interior.ColorIndex = 37
        Next j
    
        '+--- Proteksi kembali.
        Me.Protect Password:="rahasia"
    End Sub

    Cara di atas akan membuka proteksi terlebih dahulu, memproses perubahan yang akan dilakukan, kemudian memproteksi kembali sheet terkait. Kelemahan dari cara ini antara lain, apabila terjadi kesalahan, ada kemungkinan sheet tidak terproteksi kembali. Solusinya bisa dengan menyusun baris perintah untuk menangkap dan memproses kesalahan (error). Kelemahan lainnya adalah waktu eksekusi yang agak lambat, terutama saat proses utamanya cukup banyak...

    Cara lain yang bisa dilakukan adalah dengan menggunakan perintah:

    Protect UserInterfaceOnly:=True

    Perintah tersebut akan membuat proteksi hanya berlaku terhadap sisi User Interface (yang ditampilkan atau yang terlihat), sedangkan dari sisi macro VBA, proteksi secara umum tidak berlaku sehingga kita masih bisa melakukan perubahan terhadap sebuah sheet melalui macro VBA. Perintah tersebut akan membuat proses lebih cepat dikarenakan kita tidak perlu lagi membuka dan mengunci kembali proteksi sebuah sheet. Agar perintah tersebut bisa berjalan otomatis, baiknya dimasukkan ke dalam prosedur Workbook_Open, pada modul ThisWorkbook, misalkan seperti berikut:

    Private Sub Workbook_Open()
        Sheet1.Protect Password:="rahasia", UserInterFaceOnly:=True
    End Sub

    Prosedur Workbook_Open merupakan prosedur bawaan pada modul ThisWorkbook. Jadi jangan letakkan prosedur tersebut pada modul standar atau modul Worksheet. Prosedur Workbook_Open akan dipanggil secara otomatis saat Workbook dibuka...

    Demikian, semoga dapat menjadi solusi.

  3. Boleh nimbrung yah mas @caton dan @mraikarzf,
    pada script "Sheet1.Protect Password:="rahasia", UserInterFaceOnly:=True"
    apakah bisa mengakomodir juga untuk multiple sheet tertentu pada saat open workbook ?

  4. Caton

    Sep 27 Terverifikasi Indonesia + 14.596 Poin

    Mas @Dzakathar ...

    ... pada script "Sheet1.Protect Password:="rahasia", UserInterFaceOnly:=True" apakah bisa mengakomodir juga untuk multiple sheet tertentu pada saat open workbook ...

    Bisa. Bisa dilakukan secara terpisah atau sekaligus. Misalkan untuk per sheet:

    Private Sub Workbook_Open()
        Sheet1.Protect Password:="rahasia1", UserInterFaceOnly:=True
        Sheet2.Protect Password:="rahasia2", UserInterFaceOnly:=True
        Sheet3.Protect Password:="rahasia3", UserInterFaceOnly:=True
    End Sub

    Atau, jika passwordnya sama:

    Private Sub Workbook_Open()
        Dim xlWS As Worksheet
    
        For Each xlWS In Worksheets
            xlWS.Protect Password:="rahasia", UserInterFaceOnly:=True
        Next
    End Sub

    Demikian.

  5. 2 minggu lalu

    Mantab dan jelas, thanks mas @caton

 

atau Mendaftar untuk ikut berdiskusi!