Macro để tự động ẩn các hàng trống trong Excel 2010

Macro để tự động ẩn các hàng trống trong Excel 2010

CHÀO!

Tôi có một số bảng tính (gọi là 'Worksheet_1' đến 'Worksheet_4') trong đó cột đầu tiên được điền thông tin là kết quả của việc lựa chọn có/không trên một bảng tính trung tâm ('Tổng quan') bằng công thức đơn giản:

=IF('Tổng quan'!$B7="có", 'Tổng quan'!$A7,"")

Điều này dẫn đến một số hàng trống trên các trang tính ('trống' ngoại trừ công thức ở cột A)

Tôi muốn viết một Macro để ẩn những hàng trống đó, nhưng sẽ tự động thực hiện việc này bất cứ khi nào người dùng chọn "có" hoặc "không" trên trang tổng quan (điều này sẽ cập nhật các bảng tính).

Tôi thực sự rất biết ơn nếu nhận được sự giúp đỡ về vấn đề này.




Trả lời:

Sao chép mã bên dưới vào mô-đun mã của trang tính "Tổng quan".

Andreas.

Tùy chọn rõ ràng
Tùy chọn So sánh Văn bản

Bảng tính phụ riêng tư_Thay đổi (Theo giá trị mục tiêu là phạm vi)
Bảng tính Dim Ws
Làm mờ tất cả theo phạm vi, R theo phạm vi
'Có gì thay đổi ở cột B không?
Nếu Not Intersect(Target, Me.Columns("B")) là Không có gì thì
'Kiểm tra tất cả các tờ
Đối với mỗi Ws trong các bài tập
Chọn trường hợp Ws.Name
'Và trong những cái này
Trường hợp "Worksheet_1", "Worksheet_2", "Worksheet_3", "Worksheet_4"
'Lấy tất cả các ô đã sử dụng trong cột A trong trang tính đó
Đặt tất cả = Giao nhau (Ws.Columns("A"), Ws.UsedRange)
'Cho họ thấy
All.EntireRow.Hidden = False
'Tìm tất cả các ô chứa chuỗi rỗng
Đặt R = FindAll(All, "")
'Ẩn chúng nếu có
Nếu R không phải là Không có gì thì R.EntireRow.Hidden = Đúng
Kết thúc Chọn
Kế tiếp
Kết thúc nếu
Kết thúc phụ đề

Hàm FindAll(ByVal Where As Range, ByVal What, _
Tùy chọn ByVal Sau khi là Biến thể, _
Tùy chọn ByVal LookIn As XlFindLookIn = xlValues, _
Tùy chọn ByVal LookAt As XlLookAt = xlWhole, _
Tùy chọn ByVal SearchOrder As XlSearchOrder = xlByRows, _
Tùy chọn ByVal SearchDirection As XlSearchDirection = xlNext, _
Tùy chọn ByVal MatchCase As Boolean = False, _
Tùy chọn ByVal SearchFormat As Boolean = False) As Range
'Tìm tất cả các lần xuất hiện của What trong Where
Dim FirstAddress thành chuỗi
Dim c As Range
'Từ FastUnion:
Dim Stack như đối tượng 'Dictionary
Dim Temp() là biến thể
Dim i As Long, j As Long

Nếu Where Is Nothing Then Exit Function
Nếu SearchDirection = xlNext và IsMissing(After) thì
'Đặt After vào ô cuối cùng trong Where để trả về ô đầu tiên trong Where ở phía trước nếu _
nó phù hợp với cái gì
Đặt c = Where.Areas(Where.Areas.Count)
'LỖI trong XL2010: Cells.Count tạo ra RTE 6 nếu C là toàn bộ trang tính
'Đặt Sau = C.Cells(C.Cells.Count)
Đặt Sau = c.Cells(c.Rows.Count * CDec(c.Columns.Count))
Kết thúc nếu

Đặt c = Where.Find(What, After, LookIn, LookAt, SearchOrder, _
SearchDirection, MatchCase, SearchFormat:=SearchFormat)
Nếu c không có gì thì thoát khỏi hàm

'Khởi tạo ngăn xếp nội bộ của chúng ta
Đặt Stack = CreateObject("Scripting.Dictionary")

FirstAddress = c.Address
LÀM
Stack.Thêm Stack.Đếm, c
Nếu SearchFormat thì
'Nếu bạn gọi hàm này từ UDF và _
bạn chỉ tìm thấy ô đầu tiên sử dụng thay thế này
Đặt c = Where.Find(What, c, LookIn, LookAt, SearchOrder, _
SearchDirection, MatchCase, SearchFormat:=SearchFormat)
Khác
Nếu SearchDirection = xlNext thì
Đặt c = Where.FindNext(c)
Khác
Đặt c = Where.FindPrevious(c)
Kết thúc nếu
Kết thúc nếu
'Có thể xảy ra nếu chúng ta đã hợp nhất các ô
Nếu c không có gì thì thoát
Lặp lại cho đến khi FirstAddress = c.Address

'Thuật toán FastUnion © Andreas Killer, 2011:
'Lấy tất cả các ô dưới dạng các mảnh vỡ
Temp = Stack.Items
'Kết hợp từng mảnh với mảnh tiếp theo
j = 1
LÀM
Đối với i = 0 Đến UBound(Temp) - j Bước j * 2
Đặt Temp(i) = Union(Temp(i), Temp(i + j))
Kế tiếp
j = j * 2
Lặp lại cho đến khi j > UBound(Temp)
'Tại thời điểm này chúng ta có tất cả các tế bào trong mảnh đầu tiên
Đặt FindAll = Temp(0)
Chức năng kết thúc

Comments

Popular posts from this blog

Excel 2016 - mở tất cả các tệp trong MỘT phiên bản

Điều tôi muốn làm trong Excel 2010 là tạo một nút tùy chỉnh và gắn nó vào thanh công cụ Truy nhập nhanh và chạy một macro cụ thể.

Không thể hạn chế quyền trên tệp MS excel cho mac