Hỏi về cách làm ẩn dòng tự động (1 người xem)

Liên hệ QC

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

quangtay

Thành viên mới
Tham gia
21/4/09
Bài viết
18
Được thích
2
Tôi muốn ẩn dòng tự động theo điều kiện như trong file. Xin các cao thủ chỉ giúp. Cám ơn nhiều!
 

File đính kèm

Tôi muốn ẩn dòng tự động theo điều kiện như trong file. Xin các cao thủ chỉ giúp. Cám ơn nhiều!
Không phải cao thủ nhưng trả lời cho bạn như sau:
Bạn chép đoạn code sau vào cửa sổ VBA sheet1 nhé:

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 4 And Target.Cells.Count = 1 Then
If Target.Value = "TP" Then
MyAddress = Target.Address
Range(MyAddress).EntireRow.Hidden = True
End If
End If
End Sub
Bạn tham khảo thêm ở file đính kèm
Thân
 

File đính kèm

Không phải cao thủ nhưng trả lời cho bạn như sau:
Bạn chép đoạn code sau vào cửa sổ VBA sheet1 nhé:

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 4 And Target.Cells.Count = 1 Then
If Target.Value = "TP" Then
MyAddress = Target.Address
Range(MyAddress).EntireRow.Hidden = True
End If
End If
End Sub
Bạn tham khảo thêm ở file đính kèm
Thân
Nếu bạn đã viết thế thì sao không bám vào Target và viết, cần chi thêm biến
Chẳng hạn:
If Target.Value = "TP" Then Target.EntireRow.Hidden = True
Hoặc ngắn hơn nữa:
Target.EntireRow.Hidden = Target.Value = "TP"
Khỏi IF luôn cho nó ngắn
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column = 4 And Target.Cells.Count = 1 Then
    Target.EntireRow.Hidden = Target.Value = "TP"
  End If
End Sub
 
Lần chỉnh sửa cuối:
Cho minh hỏi ! Nếu cột D là giá trị trả về do hàm, thì code ẩn dòng theo điều kiện sẽ thế nào ?
 
Mình sử dụng AutoFilter được không?
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Range("A1").CurrentRegion.AutoFilter 4, "<>TP"
End Sub
 
Lần chỉnh sửa cuối:
Cho minh hỏi ! Nếu cột D là giá trị trả về do hàm, thì code ẩn dòng theo điều kiện sẽ thế nào ?
Bạn thử dùng code này:
Giả sử nếu cột D có cell nào giá trị lớn hơn 100 thì ẩn nó đi

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
      If Cells(Target.Row, 4).Value > 100 Then
         Target.EntireRow.Hidden = True
       End If
End Sub
Thân
 
Bạn thử dùng code này:
Giả sử nếu cột D có cell nào giá trị lớn hơn 100 thì ẩn nó đi

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
      If Cells(Target.Row, 4).Value > 100 Then
         Target.EntireRow.Hidden = True
       End If
End Sub
Thân

Cám ơn nhiều ! Nhưng nếu cột D (Sheet1) lấy giá trị từ cột A (Sheet2). Thì giá trị >100 vẫn không ẩn dòng được. Muốn được như vậy thì phải làm sao ?
 
To domfootwear:
Code của bạn mới làm 1 nửa phải còn 1 nửa là phải cho hiện dòng <100 chứ. Mình bổ xung 1 chút (Nhất là các dòng trả về bằng công thức phải lưu ý)
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
      If Cells(Target.Row, 4).Value > 100 Then
         Target.EntireRow.Hidden = True
       [COLOR=Blue]Else
       Target.EntireRow.Hidden = False[/COLOR]
       End If
End Sub
 
Mình sử dụng AutoFilter được không?
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Range("A1").CurrentRegion.AutoFilter 4, "<>TP"
End Sub
AutoFilter trong trường hợp này cũng rất tốt, tuy nhiên vẫn phải đặt điều kiện cho Target chứ ---> Tức phải "nói" sao cho code nó hiểu rằng: "Khi ta gõ vào đâu đó thì mới chạy code" ---> Chả lẽ ta làm bất cứ điều gì thì code cũng chạy à? Thế thì hóa ra lại.. mệt xác
Đại khái vẫn phải có đoạn:
If Target.Column = 4 And Target.Cells.Count = 1 Then
nằm trước rồi mới đến code chính
Ngoài ra, để bảng tính thể hiện được "đẹp mắt" hơn, bạn phải ẩn luôn mũi tên xổ xuống, như vậy nhìn mới độc đáo
Thử code này xem:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column = 4 And Target.Cells.Count = 1 Then
    Range([D1], [D65536].End(xlUp)).AutoFilter 1, "<>TP", , , False
  End If
End Sub
Còn code của anh Sealand:


PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
      If Cells(Target.Row, 4).Value > 100 Then
         Target.EntireRow.Hidden = True
       Else
       Target.EntireRow.Hidden = False
       End If
End Sub
thật ra cũng không cần IF gì cả... chỉ 1 dòng là đủ
PHP:
Target.EntireRow.Hidden = Cells(Target.Row, 4).Value > 100
Có điều tôi nghĩ với dử liệu thật mà dùng Worksheet_Change thì không ổn lắm... Các bạn thử nghĩ xem nếu dòng đã ẩn thì làm sao ta nhập liệu vào cột D (nếu có sửa chửa sau đó)
Theo tôi, sau khi nhập liệu hoàn tất hãy chạy code vẫn chưa muộn ---> Có điều lại phát sinh thêm 1 vấn đề: Nếu chỉ ẩn dòng với điều kiện <=100 thì cần gì đến code ??? ---> Làm bằng tay với công cụ AutoFilter cũng chẳng nhọc công gì (10 giây cho thao tác này chắc dư sức)
 
Lần chỉnh sửa cuối:
Ndu à, như mình đã mở ngoặc: Đây là trường hợp dự phòng cho trường hợp kết quả của công thức của ô hoặc định trị bởi code khác.Có như vậy mới đủ được.
Ví dụ:
1/Trang này link tới 1 trang nguồn khác, khi trang nguồn thay đổi nó sẽ ảnh hướng tới kết quả ẩn hiện (Chúng ta ngoài trả lời câu hỏi còn phải đoán câu hỏi nữa mới mệt chứ, mình phân vân từ câu hỏi bài 7 ??? Bạn xem lại có thấy mình có lý không)
2/Code rút dữ liệu từ nguồn khác và điền vào sheet này.
Code này cũng là giải pháp thôi còn thực tế thường có thêm 1 đoạn code nữa để tăng tốc sử lý, giảm bớt sự ảnh hưởng đến hoạt động bình thường của Excel như:

If Target.column<>4 then exit sub
Chỉ xét thay đổi trên cột D
 
Lần chỉnh sửa cuối:
Ndu à, như mình đã mở ngoặc: Đây là trường hợp dự phòng cho trường hợp kết quả của công thức của ô hoặc định trị bởi code khác.Có như vậy mới đủ được.
Ví dụ:
1/Trang này link tới 1 trang nguồn khác, khi trang nguồn thay đổi nó sẽ ảnh hướng tới kết quả ẩn hiện
2/Code rút dữ liệu từ nguồn khác và điền vào sheet này.

Code này cũng là giải pháp thôi còn thực tế thường có thêm 1 đoạn code nữa để tăng tốc sử lý, giảm bớt sự hoạt động bình thường của Excel như:

If Target.column<>4 then exit sub
Chỉ xét thay đổi trên cột D

Nhờ BQT xóa giúp, mình sửa bài không hiếu sao lại thành bài mới
 
Lần chỉnh sửa cuối:
1/Trang này link tới 1 trang nguồn khác, khi trang nguồn thay đổi nó sẽ ảnh hướng tới kết quả ẩn hiện (Chúng ta ngoài trả lời câu hỏi còn phải đoán câu hỏi nữa mới mệt chứ, mình phân vân từ câu hỏi bài 7 ??? Bạn xem lại có thấy mình có lý không)
2/Code rút dữ liệu từ nguồn khác và điền vào sheet này.
Vâng đúng vậy ! Mình có 1 (Bảng tổng hợp hàng hoá) được trích ra từ (Bảng danh mục) với điều kiện giá > 100.000. Hiện tại mình dùng cách dữ kiện nào không thỏa mãn thì để trắng. Vì thế mình muốn có 1 code nào đó để ẩn những giá trị không thõa mãn đó đi (Tất nhiên khi giá của mặt hàng thay đổi > 100.000 thì nó lại hiện ra). Như vậy phải làm sao, mong mọi người giúp đỡ !
 
Vâng đúng vậy ! Mình có 1 (Bảng tổng hợp hàng hoá) được trích ra từ (Bảng danh mục) với điều kiện giá > 100.000. Hiện tại mình dùng cách dữ kiện nào không thỏa mãn thì để trắng. Vì thế mình muốn có 1 code nào đó để ẩn những giá trị không thõa mãn đó đi (Tất nhiên khi giá của mặt hàng thay đổi > 100.000 thì nó lại hiện ra). Như vậy phải làm sao, mong mọi người giúp đỡ !
Làm sao thì cũng khó nói, vì chưa thấy file của bạn!
Bạn hãy gữi lên đi, như vậy dể "ăn nói" hơn
 
To xmanpro
Những đứa không đủ tiêu chuẩn thì bạn rủ rê nó sang làm gì mà mất công bố trí cho nó ẩn với nấp. GPE có 1001 kiểu soát vé giúp bạn cơ mà? (Nói nhỏ nhé:"Ndu tham gia trả lời bạn thì khoản này khỏi lo") Nói vui vậy thôi, sao bạn không sử lý ngay từ khâu tạo DS mà lại tạo tất cả rồi mới sử lý. Như vậy nó khác nhau rất nhiều về tốc độ sử lý và dung lượng file nếu dữ liệu lớn. Ngoài giải pháp, chúng ta cũng cần quan tâm tới việc tối ưu giải pháp để đạt kết quả tốt hơn có thể.
Mặt khác, mình cũng tham gia thêm với các bạn về đặt câu hỏi. Gần cả chục bài mới vỡ ra câu hỏi của bạn. Tốt nhất các bạn nên lấy chính File của mình, xóa bớt dữ liệu và điều chỉnh các nội dung nhạy cảm làm ví dụ là tốt nhất.
 
Lần chỉnh sửa cuối:
Hi hi ! Thực ra câu hỏi về code VBA (Ẩn dùng dòng tự động) này là của bạn quangtay. Mình thấy hay quá nên chạy thử vào file của mình xem sao, nhưng nhận thấy khi giá trị nếu được trả về từ 1 hàm hay liên kết từ 1 sheet khác thì code không hoạt động. Bản thân thì mới bắt đầu tìm hiểu VBA, vì thế mọi thứ gà mờ thế đấy. Rất cám ơn sealand, ndu96081631, domfootwear và các thành viên trong diễn đàn !
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom