Share macro VBA "Excel" dùng để khóa sheet và ẩn/hiện các dòng trống dữ liệu ở cột G đến P, bắt đầu từ dòng 5

 Các bước thực hiện thêm Macro mới

 

Bước 1 — Tạo PERSONAL.XLSB

Xem (View) → Macro → Ghi Macro (Record Macro).

Ở mục Lưu macro trong / Store macro in, chọn:

Personal Macro Workbook / Sổ làm việc Macro Cá nhân

Đặt tên bất kỳ, ví dụ TaoPersonal → OK → sau đó bấm Dừng ghi (Stop Recording).

Excel sẽ tự tạo file PERSONAL.XLSB.

 

Bước 2 — Mở VBA

Nhấn:

Alt + F11

Sau đó nhìn bên trái, bạn sẽ thấy:

VBAProject (PERSONAL.XLSB)

Ads Code

Chọn:

PERSONAL.XLSB → Insert → Module

 

Bước 3 — Dán macro này

 

Sub KhoaMoTatCaSheet()

 

    Dim ws As Worksheet

    Dim MatKhau As String

    Dim CoSheetChuaKhoa As Boolean

    Dim SoSheetXuLy As Long

    Dim SoSheetBoQua As Long

    Dim rngFormula As Range

 

    MatKhau = "0943836131"

 

    Application.ScreenUpdating = False

    Application.EnableEvents = False

 

    On Error GoTo XuLyLoi

 

    '========================================

    ' 1. KIỂM TRA TOÀN BỘ WORKBOOK

    ' Còn ít nhất 1 sheet chưa khóa -> KHÓA

    ' Tất cả sheet đã khóa -> MỞ

    '========================================

 

    CoSheetChuaKhoa = False

 

    For Each ws In ActiveWorkbook.Worksheets

 

        If ws.ProtectContents = False Then

            CoSheetChuaKhoa = True

            Exit For

        End If

 

    Next ws

 

 

    '========================================

    ' 2. CHẾ ĐỘ KHÓA

    '========================================

 

    If CoSheetChuaKhoa = True Then

 

        For Each ws In ActiveWorkbook.Worksheets

 

            'Chỉ xử lý sheet chưa khóa

            If ws.ProtectContents = False Then

 

                '----------------------------------------

                ' Chỉ ẩn các ô thực sự có công thức

                '----------------------------------------

                Set rngFormula = Nothing

 

                On Error Resume Next

                Set rngFormula = ws.UsedRange.SpecialCells(xlCellTypeFormulas)

                On Error GoTo XuLyLoi

 

                If Not rngFormula Is Nothing Then

                    rngFormula.FormulaHidden = True

                End If

 

                '----------------------------------------

                ' Khóa sheet

                ' Vẫn cho phép Filter + PivotTable

                '----------------------------------------

                ws.Protect _

                    Password:=MatKhau, _

                    DrawingObjects:=False, _

                    Contents:=True, _

                    Scenarios:=True, _

                    AllowFiltering:=True, _

                    AllowUsingPivotTables:=True

 

                SoSheetXuLy = SoSheetXuLy + 1

 

            Else

 

                'Sheet đã khóa từ trước -> giữ nguyên

                SoSheetBoQua = SoSheetBoQua + 1

 

            End If

 

        Next ws

 

 

        Application.EnableEvents = True

        Application.ScreenUpdating = True

 

        MsgBox _

            "ĐÃ KHÓA VÀ ẨN CÔNG THỨC" & vbCrLf & vbCrLf & _

            "Khóa mới: " & SoSheetXuLy & " sheet" & vbCrLf & _

            "Đã khóa từ trước, giữ nguyên: " & SoSheetBoQua & " sheet" & vbCrLf & vbCrLf & _

            "Vẫn sử dụng được:" & vbCrLf & _

            "- Bộ lọc tự động" & vbCrLf & _

            "- PivotTable / PivotChart", _

            vbInformation, "KHÓA SHEET"

 

 

    '========================================

    ' 3. CHẾ ĐỘ MỞ

    '========================================

 

    Else

 

        For Each ws In ActiveWorkbook.Worksheets

 

            If ws.ProtectContents = True Then

 

                Err.Clear

                On Error Resume Next

 

                'Chỉ sheet đúng mật khẩu mới mở được

                ws.Unprotect Password:=MatKhau

 

                If Err.Number = 0 And ws.ProtectContents = False Then

 

                    '----------------------------------------

                    ' Hiện lại công thức của sheet vừa mở

                    '----------------------------------------

                    Set rngFormula = Nothing

 

                    Set rngFormula = _

                        ws.UsedRange.SpecialCells(xlCellTypeFormulas)

 

                    If Not rngFormula Is Nothing Then

                        rngFormula.FormulaHidden = False

                    End If

 

                    SoSheetXuLy = SoSheetXuLy + 1

 

                Else

 

                    'Mật khẩu khác -> giữ nguyên

                    SoSheetBoQua = SoSheetBoQua + 1

 

                End If

 

                Err.Clear

                On Error GoTo XuLyLoi

 

            End If

 

        Next ws

 

 

        Application.EnableEvents = True

        Application.ScreenUpdating = True

 

        MsgBox _

            "ĐÃ MỞ CÁC SHEET ĐÚNG MẬT KHẨU" & vbCrLf & vbCrLf & _

            "Đã mở: " & SoSheetXuLy & " sheet" & vbCrLf & _

            "Mật khẩu khác, giữ nguyên: " & SoSheetBoQua & " sheet", _

            vbInformation, "MỞ KHÓA SHEET"

 

    End If

 

    Exit Sub

 

 

'========================================

' 4. XỬ LÝ LỖI

'========================================

 

XuLyLoi:

 

    Application.EnableEvents = True

    Application.ScreenUpdating = True

 

    MsgBox _

        "Có lỗi khi xử lý." & vbCrLf & _

        "Sheet: " & ws.Name & vbCrLf & _

        "Lỗi: " & Err.Description, _

        vbExclamation, "LỖI"

 

End Sub

 

 

Macro trên sau khi khóa vẫn: ☑ Sử dụng Bộ lọc Tự động

  ☑ Sử dụng PivotTable và PivotChart ( vẫn sử dụng bộ lọc)

 

Bạn đổi: MatKhau = "0943836131"  thành Mật khẩu Bạn muốn

 

Bước 4 — Lưu PERSONAL.XLSB

Nhấn Ctrl + S.

Sau đó đóng Excel. Nếu Excel hỏi có muốn lưu thay đổi đối với Personal Macro Workbook thì chọn Save/Lưu.

 

Bước 5 — Đưa 2 nút lên thanh công cụ

Mở lại Excel.

Vào:

Tệp → Tùy chọn → Thanh công cụ Truy nhập Nhanh

Ở Chọn lệnh từ, chọn:

Macro

Bạn sẽ thấy:

PERSONAL.XLSB!KhoaTatCaSheet

PERSONAL.XLSB!MoKhoaTatCaSheet

Thêm cả hai sang bên phải.

Bạn có thể chọn Sửa đổi/Modify để đổi biểu tượng cho dễ nhận biết.

Sau này thao tác chỉ còn:

Mở file Excel → bấm nút Khóa → xong.

Khi cần sửa dữ liệu:

Bấm nút Mở khóa → xong.

Muốn sửa Macro cũ bấm Alt + F11   , sửa xong nhớ bấm Ctrl + S

Sau đó có thể nhấn Alt + F11 để quay lại Excel. tắt Excel và Save

Cách gán phím tắt

Trong Excel:

1. Nhấn Alt + F8 để mở danh sách Macro.

2. Chọn macro:

PERSONAL.XLSB!KhoaTatCaSheet

3. Bấm Options... / Tùy chọn...



Macro VBA trong Excel dùng để ẩn/hiện các dòng dựa trên dữ liệu ở cột G đến P, bắt đầu từ dòng 5

 

Sub AnBoAnDongTrong_G_P()

 

    Dim ws As Worksheet

    Dim lastRow As Long

    Dim r As Long

    Dim c As Range

    Dim CoDuLieu As Boolean

    Dim CoDongDangAn As Boolean

 

    Set ws = ActiveSheet

 

    If ws.Cells.Find("*", SearchOrder:=xlByRows, _

        SearchDirection:=xlPrevious) Is Nothing Then Exit Sub

 

    lastRow = ws.Cells.Find("*", SearchOrder:=xlByRows, _

                           SearchDirection:=xlPrevious).Row

 

    Application.ScreenUpdating = False

 

    'Kiem tra xem co dong nao dang bi an hay khong

    For r = 5 To lastRow

        If ws.Rows(r).Hidden = True Then

            CoDongDangAn = True

            Exit For

        End If

    Next r

 

    If CoDongDangAn Then

 

        'Bo an tat ca cac dong

        ws.Rows("5:" & lastRow).Hidden = False

 

    Else

 

        'An dong neu tat ca cac o G:P deu trong

        For r = 5 To lastRow

 

            CoDuLieu = False

 

            For Each c In ws.Range("G" & r & ":P" & r)

 

                'Cong thuc tra ve "" cung duoc coi la trong

                If Len(Trim(CStr(c.Value))) > 0 Then

                    CoDuLieu = True

                    Exit For

                End If

 

            Next c

 

            If CoDuLieu = False Then

                ws.Rows(r).Hidden = True

            End If

 

        Next r

 

    End If

 

    Application.ScreenUpdating = True

 

End Sub

 

 


 

 

 

 

Related posts:

Đăng nhận xét

Mới hơn Cũ hơn

Discuss

×Close