Tự Động Ẩn Dòng và Chèn Dòng Bằng VBA Khi Dữ Liệu Nguồn Thay Đổi (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

nguoibantot

Thành viên mới
Tham gia
22/5/10
Bài viết
2
Được thích
0
Chào các anh, chị trong diễn đàn GPE,
Nhờ các anh, chị giúp em bài toán sau
Em muốn khi cập nhật sheet “File nguồn” - phần Thông tin học viên, như: xóa dữ liệu, thêm dữ liệu, chèn thêm dòng, thì các sheet khác sẽ:
1. Tự động ẩn dòng khi dòng không có dữ liệu
2. Tự động hiện ra dòng khi dòng có dữ liệu
3. Tự động chèn thêm dòng (có copy công thức) khi dữ liệu nguồn được chèn thêm dòng
Ngoài ra, em cũng nhờ các anh, chị hướng dẫn giúp em thao tác “Undo” khi sử dụng VBA nhé
Em đã tự mày mò viết code và thành công ở 2 bước đầu tiên. Mong các anh, chị có thể giúp em hoàn thiện code VBA để file có thể tự động ẩn dòng, chèn dòng khi dữ liệu nguồn thay đổi cũng như có thể Undo nhé
Cảm ơn các anh, chị thật nhiều
 

File đính kèm

Đã xài VBA thì: Tên trang tính fải đọan tuyệt với tiếng Việt có dấu
Tên trang tính không nên có các kí tự không bình thường như '+", "-", . . . .

Tên trang tính không cần thiết fải dài quá như vậy; Ví dụ "File nguồn" chỉ nên là "CSDL" hay "HSNS" hay "HoSo"

Dòng 23 của trang này không cần thiết; & vì nó nên CSDL của bạn chưa đạt chuẩn cho VBA
 
Upvote 0
Xin cảm ơn ChanhTQ@. Thú thật là mình cũng chưa rành về VBA nên còn nhiều lỗi như vậy. Sorry ChanhTQ@, mình đã chỉnh sửa lại file như gợi ý của ChanhTQ@ rồi nhưng không up file lên được Mình xin gửi đoạn code chưa hoàn thiện của mình ở đây luôn nhé. Mong nhờ ChanhTQ@ hỗ trợ giúp mình, cảm ơn ChanhTQ@ thật nhiều

Private Sub Worksheet_Activate()
Dim c As Range
Dim firstAddress As String
Application.ScreenUpdating = False
Rows("11:202").Hidden = False
With Range("A11:A202")
Set c = .Find(What:=" ", LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.EntireRow.Hidden = True
Set c = .FindNext(c)
Loop While Not c Is Nothing
End If
End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
UnDo mình cũng đang kỳ vọng được xài, bạn nào có thì hướng dẫn với nhé
 
Upvote 0
Ở đây bạn nên sử dụng even worksheet_Change thì đúng hơn. Thứ 2 là bạn nên sử dụng vòng lặp for thay vì dùng find, tốc độ của script sẽ nhanh hơn gấp nhiều lần. Thứ 3 là ban mún theo tác undo trên excel sheet nhưng làm trong Vba thì bạn nên nghiên cứu method Aplication.undo nhé.
Xin cảm ơn ChanhTQ@. Thú thật là mình cũng chưa rành về VBA nên còn nhiều lỗi như vậy. Sorry ChanhTQ@, mình đã chỉnh sửa lại file như gợi ý của ChanhTQ@ rồi nhưng không up file lên được Mình xin gửi đoạn code chưa hoàn thiện của mình ở đây luôn nhé. Mong nhờ ChanhTQ@ hỗ trợ giúp mình, cảm ơn ChanhTQ@ thật nhiều

Private Sub Worksheet_Activate()
Dim c As Range
Dim firstAddress As String
Application.ScreenUpdating = False
Rows("11:202").Hidden = False
With Range("A11:A202")
Set c = .Find(What:=" ", LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.EntireRow.Hidden = True
Set c = .FindNext(c)
Loop While Not c Is Nothing
End If
End With
End Sub
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom