HIDE/SEMBUNYIKAN BARIS OTOMATIS

  1. 3 minggu lalu
    Di sunting 3 minggu lalu oleh mumuskh

    Mohon maaf sebelumnya, Mohon pencerahannya para master vb

    Bagaiman cara supaya baris excell yang kosong otomatis terhide, tanpa tombol, sementara yg sy bs pakek tombol, terima kasih

    @mumuskh ... sy coba di sheet PRINT dan sy ganti sebagian scripnya, ternyata yg kode "A "tampil juga ...

    Jika kode pada kolom H tidak tersusun berurutan, maka script awal tersebut tidak tepat. Solusinya, ganti scriptnya seperti berikut:

    Option Explicit
    
    Private Sub ShowRows()
        Dim sAddr As String
        lIdx As Long
        
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        
        sAddr = vbNullString
        For lIdx = 7 To 56
            If Me.Range("H" & lIdx) = "A" Then
                sAddr = sAddr & "A" & lIdx & ", "
            End If
        Next
        
        Me.Range("A7:A56").EntireRow.Hidden = False
        If Len(sAddr) Then
            sAddr = Left$(sAddr, Len(Trim$(sAddr)) - 1)
            Me.Range(sAddr).EntireRow.Hidden = True
        End If
        
        Application.EnableEvents = True
        Application.ScreenUpdating = True
        
    End Sub
    
    Private Sub Worksheet_Activate()
        Call ShowRows
    End Sub
    
    Private Sub Worksheet_Calculate()
        Call ShowRows
    End Sub

    Script di atas juga dapat diaplikasikan ke sheet LAPORAN BLN.

    Demikian.

  2. Caton

    Sep 30 Terverifikasi Indonesia + 12.014 Poin

    @mumuskh ... cara supaya baris excell yang kosong otomatis terhide, tanpa tombol, sementara yg sy bs pakek tombol ...

    Coba manfaatkan prosedur Sub Worksheet_Activate atau Sub Worksheet_Calculate untuk mengeksekusi prosedur utamanya, misalkan:

    Option Explicit
    
    Private Sub ShowRows()
        Dim sAddr As String
        Dim lRow As Long
        
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        
        lRow = WorksheetFunction.CountIf(Me.Range("S7:S56"), "B")
        If lRow = Me.Range("S7:S56").Rows.Count Then
            sAddr = "A7:A56"
            Me.Range(sAddr).EntireRow.Hidden = False
        Else
            sAddr = "A7:A" & lRow + 6
            Me.Range(sAddr).EntireRow.Hidden = False
            sAddr = "A" & lRow + 6 + 1 & ":A56"
            Me.Range(sAddr).EntireRow.Hidden = True
        End If
        
        Application.EnableEvents = True
        Application.ScreenUpdating = True
        
    End Sub
    
    Private Sub Worksheet_Activate()
        Call ShowRows
    End Sub
    
    Private Sub Worksheet_Calculate()
        Call ShowRows
    End Sub

    Atau lihat pada file terlampir.

    Demikian.

  3. terima kasih banyak ilmux

  4. Di sunting 3 minggu lalu oleh mumuskh

    maaf, sy blum faham maksud dari
    Dim sAddr As String
    Dim lRow As Long
    mohon penjelasannya, terima kasih

  5. Caton

    Sep 30 Terverifikasi Indonesia + 12.014 Poin

    @mumuskh ... terima kasih ...

    Sama-sama ...

    @mumuskh ... sy blum faham maksud dari:

    Dim sAddr As String 
    Dim lRow As Long 

    mohon penjelasannya ...

    Itu merupakan baris untuk mendeklarasikan variabel yang akan digunakan. Atau dengan kalimat umum, baris tersebut bertujuan untuk memberitahu kompiler VBA bahwa proses meminta disiapkan variabel dengan nama sAddr bertipe String dan variabel dengan nama lRow bertipe Long.

    — Mengapa variabel tersebut (harus) dideklarasikan? Karena saya terbiasa menggunakan opsi eksplisit, seperti pada awal modul tersebut:

    Option Explicit

    — Apakah setiap variabel harus dideklarasikan? Tergantung, jika menggunakan opsi eksplisit, maka setiap variabel harus dideklarasikan. Jika tanpa opsi eksplisit, bisa dideklarasikan, bisa juga tidak.

    — Apa gunanya mendeklarasikan variabel? Banyak.

    Dengan penamaan variabel yang tepat dan mudah dipahami, akan membuat baris script program lebih mudah dipahami. Contohnya saja, untuk setiap jenis variabel, saya sering menggunakan prefiks tertentu untuk menandai jenis variabel tersebut, misalkan:

    Dim sNama As String
    Dim lIndeks As Long
    Dim dTanggal As Date
    Dim dHarga As Double
    Dim bValid As Boolean
    Dim xArray() As String
    Dim xDictObject As New Dictionary

    dan sebagainya. Jadi, sesuaikan saja dengan selera dan apa yang dipahami. Selain itu, dengan deklarasi variabel dapat mencegah kesalahan typo (salah ketik) nama variabel. Misalkan, baris script berikut disusun tanpa deklarasi:

    ....
    sNama = "James"
    ...
    sName = sName & " Bond"
    ...
    Sheet1.Range("A1").Value = sNama
    ...

    Sekilas, dilihat dari script di atas, pada sel A1 Sheet1 akan berisi nilai James Bond. Namun kenyataannya, sel A1 pada Sheet1 hanya akan berisi nilai James saja. Jika program yang disusun hanya terdiri dari beberapa baris script, mungkin penelusuran kesalahan akan mudah. Namun coba bayangkan jika sudah ada puluhan atau ratusan baris script ... (^_^)/

    Masalah lain yang mungkin saja terjadi adalah pengisian tipe nilai yang salah terhadap variabel. Contohnya ± seperti berikut:

    ...
    '+-- 1. Asumsikan di sini di isi banyak baris script lainnya.
    nilaidata = 1000
    
    '+-- 2. Asumsikan di sini di isi banyak baris script lainnya.
    nilaidata = nilaidata & Sheet1.Range("A1").Value
    Sheet1.Range("C1").Value = nilaidata
    
    '+-- 3. Asumsikan di sini di isi banyak baris script lainnya.
    nilaidata = nilaidata * 2
    Sheet1.Range("D1").Value = nilaidata
    ...

    Pada script di atas, pada poin ke-1, variabel nilaidata awalnya akan berisi nilai 1000, berarti tipe nilainya numerik. Pada proses selanjutnya, pada poin ke-2, variabel nilaidata digunakan dalam operasi teks. Mungkin saja ada kesalahan pada baris script tersebut. Katakanlah, pada sel A1 berisi nilai 100, dan hasil yang diinginkan sebenarnya adalah 100000 (= 1000 * 100). Namun karena kesalahan ketik, yang dihasilkan adalah "1000100" (string/teks). Pada poin ini, oleh karena variabel nilaidata tidak dideklarasikan secara eksplisit, maka Excel akan tetap memproses baris tersebut tanpa menghasilkan kesalahan.

    Potensi masalah ada pada poin ke-3. Jika pada poin ke-2, nilai sel A1 adalah numerik, misalkan angka 100, maka:

    '+-- Poin ke-2
    nilaidata = nilaidata & Sheet1.Range("A1").Value
    nilaidata = 1000 & 100
    nilaidata = "1000100"
    
    '+-- Poin ke-3
    nilaidata = nilaidata * 2
    nilaidata = "1000100" * 2
    nilaidata = 2000200

    Namun jika pada poin ke-2, nilai sel A1 adalah teks, misalkan teks ABC, maka yang terjadi:

    '+-- Poin ke-2
    nilaidata = nilaidata & Sheet1.Range("A1").Value
    nilaidata = 1000 & "ABC"
    nilaidata = "1000ABC"
    
    '+-- Poin ke-3
    nilaidata = nilaidata * 2
    nilaidata = "1000ABC" * 2   '<---- Error Type Mismatch!

    Dalam VBA, sebuah variabel yang tidak dideklarasikan, maka secara otomatis akan dideklarasikan sebagai Variant. Oleh karena tipe variabelnya adalah Variant, maka variabel terkait dapat berubah tipe berdasarkan proses penetapan nilainya.

    Itu saja yang dapat saya jelaskan. Jadi, apakah deklarasi variabel harus tetap dilakukan? Menurut saya, kembali kepada masing-masing penyusun programnya, mau dan sukanya bagaimana ...

    Demikian.

  6. terima kasih banyak ilmux, sy pelajari dlu

  7. Di sunting 3 minggu lalu oleh mumuskh

    maaf sy coba di sheet PRINT dan sy ganti sebagian scripnya, ternyata yg kode "A "tampil juga, mohon pencerahanya.

    lRow = WorksheetFunction.CountIf(Me.Range("H7:H56"), "B")
    If lRow = Me.Range("H7:H56").Rows.Count Then
    sAddr = "H7:H56"
    Me.Range(sAddr).EntireRow.Hidden = False
    Else
    sAddr = "A7:A" & lRow + 6
    Me.Range(sAddr).EntireRow.Hidden = False
    sAddr = "A" & lRow + 6 + 1 & ":A56"
    Me.Range(sAddr).EntireRow.Hidden = True

    maaf blum faham maksud dari scrip ini
    sAddr = "A7:A" & lRow + 6
    Me.Range(sAddr).EntireRow.Hidden = False
    sAddr = "A" & lRow + 6 + 1 & ":A56"
    Me.Range(sAddr).EntireRow.Hidden = True

  8. Caton

    Okt 1 Terverifikasi Jawaban Terpilih Indonesia + 12.014 Poin

    @mumuskh ... sy coba di sheet PRINT dan sy ganti sebagian scripnya, ternyata yg kode "A "tampil juga ...

    Jika kode pada kolom H tidak tersusun berurutan, maka script awal tersebut tidak tepat. Solusinya, ganti scriptnya seperti berikut:

    Option Explicit
    
    Private Sub ShowRows()
        Dim sAddr As String
        lIdx As Long
        
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        
        sAddr = vbNullString
        For lIdx = 7 To 56
            If Me.Range("H" & lIdx) = "A" Then
                sAddr = sAddr & "A" & lIdx & ", "
            End If
        Next
        
        Me.Range("A7:A56").EntireRow.Hidden = False
        If Len(sAddr) Then
            sAddr = Left$(sAddr, Len(Trim$(sAddr)) - 1)
            Me.Range(sAddr).EntireRow.Hidden = True
        End If
        
        Application.EnableEvents = True
        Application.ScreenUpdating = True
        
    End Sub
    
    Private Sub Worksheet_Activate()
        Call ShowRows
    End Sub
    
    Private Sub Worksheet_Calculate()
        Call ShowRows
    End Sub

    Script di atas juga dapat diaplikasikan ke sheet LAPORAN BLN.

    Demikian.

  9. Di sunting 3 minggu lalu oleh mumuskh

    baik, terima kasih banyak, sy coba dlu, smg slalu sehat, panjang umur dan lancar rizkinya

  10. Di sunting 3 minggu lalu oleh mumuskh

    stlh sy coba ada error dg keterangan sprt file berikut

  11. manweljs_

    Okt 1 Terverifikasi + 5.173 Poin

    kalo di sheet print pake skrip ini bisa gak ya?

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(0, 0) = "L2" Then
    x = Range("N2").Value
        If x > 0 Then
        Range("A7:A56").EntireRow.Hidden = True
        Range("A7:A" & x + 6).EntireRow.Hidden = False
        Else
        Range("A7:A56").EntireRow.Hidden = True
        End If
    End If
    End Sub

  12. Caton

    Okt 1 Terverifikasi Indonesia + 12.014 Poin

    @mumuskh ... stlh sy coba ada error dg keterangan sprt file berikut ...

    Ada yang tertinggal .... :)

    Private Sub ShowRows()
        Dim sAddr As String
        Dim lIdx As Long
    ...    
    End Sub

    Begitu ...

  13. manweljs_

    Okt 1 Terverifikasi + 5.173 Poin
    Di sunting 3 minggu lalu oleh manweljs_

    oh ada kriteria "B" dan "A" ya, kalo sub hide_rows sudah benar, panggil aja skrip tersebut

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(0, 0) = "L2" Or Target.Address(0, 0) = "M2" Then
    hide_rows
    End If
    End Sub

  14. Di sunting 3 minggu lalu oleh mumuskh

    maaf stlh sy coba masih belum bisa..

  15. Caton

    Okt 1 Terverifikasi Indonesia + 12.014 Poin

    @mumuskh maaf stlh sy coba masih belum bisa..

    Coba file terlampir ... :)

  16. Di sunting 3 minggu lalu oleh mumuskh

    Terima kasih, tp stlh sy coba masih muncul keterangan
    Statement invalid outside type block dan di scrip Private Sub ShowRows() berwarna kuning

  17. Caton

    Okt 1 Terverifikasi Indonesia + 12.014 Poin
    Di sunting 3 minggu lalu oleh Caton

    @mumuskh ... Statement invalid outside type block dan di scrip Private Sub ShowRows() berwarna kuning ...

    Bila muncul kesalahan seperti demikian, perbaiki kesalahannya dahulu. Misalkan, pada baris:

    Private Sub ShowRows()
        Dim sAddr As String
        lIdx As Long
    ...    
    End Sub

    diperbaiki menjadi

    Private Sub ShowRows()
        Dim sAddr As String
        Dim lIdx As Long
    ...    
    End Sub

    kemudian tekan tombol F5 kemudian tekan tombol CONTROL+S (Simpan). Atau coba periksa dan pelajari dari file terlampir ...

    Demikian.

  18. baik, terima kasih banyak

 

atau Mendaftar untuk ikut berdiskusi!