Xin mã code ẩn hiện dòng theo điều kiện (1 người xem)

Liên hệ QC

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

Tôi tuân thủ nội quy khi đăng bài

Nguyễn Diêu Hiền

Thành viên mới
Tham gia
16/11/15
Bài viết
33
Được thích
0
Mình có file biên bản như đính kèm, anh/chị /em trong diễn đàn cho mình xin đoạn mã code ẩn/hiện dòng với điều kiện như sau ạ:
- Nếu A12:A14 khác rỗng, thì dòng thứ 50-:-52 được hiển thị đồng thời dòng 47-:-49 bị ẩn
- Ngược lại nếu A12:A14 = trống, thì dòng thứ 50-:-52 bị ẩn đồng thời dòng 47-:-49 sẽ hiển thị
Chân thành cảm ơn anh/chị/em đã quan tâm giúp đỡ ạ!
 

File đính kèm

Mình có file biên bản như đính kèm, anh/chị /em trong diễn đàn cho mình xin đoạn mã code ẩn/hiện dòng với điều kiện như sau ạ:
- Nếu A12:A14 khác rỗng, thì dòng thứ 50-:-52 được hiển thị đồng thời dòng 47-:-49 bị ẩn
- Ngược lại nếu A12:A14 = trống, thì dòng thứ 50-:-52 bị ẩn đồng thời dòng 47-:-49 sẽ hiển thị
Chân thành cảm ơn anh/chị/em đã quan tâm giúp đỡ ạ!
Không biết có đúng ý định không?
Hãy thử thay đổi (gõ gì vào A12:A14) và xem kết quả.
 

File đính kèm

Upvote 0
Không biết có đúng ý định không?
Hãy thử thay đổi (gõ gì vào A12:A14) và xem kết quả.
Cảm ơn bạn rất nhiều!
Nhưng cho mình hỏi, mình muốn kết hợp đoạn mã code ẩn hiện dòng tự động (từ dòng thú 5 -:- 14) thì phải làm như thế nào vậy?
Đoạn mã code ẩn hiện dòng tự động (từ dòng thú 5 -:- 14) trong file đính kèm mình đã có
 

File đính kèm

Upvote 0
Nhưng cho mình hỏi, mình muốn kết hợp đoạn mã code ẩn hiện dòng tự động (từ dòng thú 5 -:- 14) thì phải làm như thế nào vậy?
Đoạn mã code ẩn hiện dòng tự động (từ dòng thú 5 -:- 14) trong file đính kèm mình đã có
Đọc nhưng không hiểu bạn đang muốn gì. Có phải bạn muốn chỉnh vùng ẩn hiện dòng từ [A7:A14] thành [A5:A14] ?
Mã:
Private Sub Worksheet_Activate()
    Dim Rng As Range
    Application.ScreenUpdating = False
    For Each Rng In [A5:A14]
        Rng.EntireRow.Hidden = Rng.Value = ""
    Next Rng
End Sub
Nếu vậy bạn chỉ cần chỉnh chỗ [A7:A14] thành [A5:A14]
 
Upvote 0
Đọc nhưng không hiểu bạn đang muốn gì. Có phải bạn muốn chỉnh vùng ẩn hiện dòng từ [A7:A14] thành [A5:A14] ?
Mã:
Private Sub Worksheet_Activate()
    Dim Rng As Range
    Application.ScreenUpdating = False
    For Each Rng In [A5:A14]
        Rng.EntireRow.Hidden = Rng.Value = ""
    Next Rng
End Sub
Nếu vậy bạn chỉ cần chỉnh chỗ [A7:A14] thành [A5:A14]
Không phải bạn, mình muốn kết hợp đoạn ẩn hiện dòng từ A5:A14 với điều kiện này:
"- Nếu A12:A14 khác rỗng, thì dòng thứ 50-:-52 được hiển thị đồng thời dòng 47-:-49 bị ẩn
- Ngược lại nếu A12:A14 = trống, thì dòng thứ 50-:-52 bị ẩn đồng thời dòng 47-:-49 sẽ hiển thị"
 
Upvote 0
Không phải bạn, mình muốn kết hợp đoạn ẩn hiện dòng từ A5:A14 với điều kiện này:
"- Nếu A12:A14 khác rỗng, thì dòng thứ 50-:-52 được hiển thị đồng thời dòng 47-:-49 bị ẩn
- Ngược lại nếu A12:A14 = trống, thì dòng thứ 50-:-52 bị ẩn đồng thời dòng 47-:-49 sẽ hiển thị"
1- Kết hợp là thế nào, trong khi hai event này là riêng biệt độc lập với nhau? Một cái là khi activate sheet, 1 cái là thay đổi giá trị ô?
Bạn cứ để chung vào 1 cái worksheet module là đựơc mà
2- Code này:
PHP:
 Rng.EntireRow.Hidden = Rng.Value = ""
Mình không biết có hoạt động đúng ý bạn hay không nhưng mình không hiểu ya1 bạn muốn code làm gì, và tại sao có 2 dấu "="
???
 
Upvote 0
"- Nếu A12:A14 khác rỗng, thì dòng thứ 50-:-52 được hiển thị đồng thời dòng 47-:-49 bị ẩn
- Ngược lại nếu A12:A14 = trống, thì dòng thứ 50-:-52 bị ẩn đồng thời dòng 47-:-49 sẽ hiển thị"
Uầy, bạn đính kèm cái file đó trong tất cả các bài làm gì đâu :D
Đọc không hiểu luôn. Logic bạn đưa ra không khó, nhưng nó hơi lạm dụng. Và tồn tại các vấn đề sau:
1. Khi Hide phần CDT đi, thì số của TVGS phải nhảy lại là số 1 chứ ?
2. Khi nào thì dùng form nào ?
---------
Tất cả việc này rất đơn giản là tạo ra 2 cái form, ứng với 2 trường hợp.

Mã:
Private Sub Worksheet_Activate()
    Dim Rng As Range
    Application.ScreenUpdating = False
    For Each Rng In [A5:A14]
        Rng.EntireRow.Hidden = Rng.Value = ""
    Next Rng
        [A47:A49].EntireRow.Hidden = [A12].Value <> ""
        [A50:A52].EntireRow.Hidden = [A12].Value = ""
   Application.ScreenUpdating = True
End Sub
 

File đính kèm

Upvote 0
@Thớt: Làm như thế này này
Mã:
Sub test()
const sRangeRef = "A12:A14"
const listRow1 = "47:49"
const listRow2 = "50:52"
Dim ws as worksheet
set ws = activesheet
ws.rows(listRow1).hidden = False
ws.rows(listRow2).hidden = False
if isEmptyRange(ws.Range(sRangeRef) ) = False then
ws.rows(listRow1).hidden = True
ws.rows(listRow2).hidden = False
else
ws.rows(listRow1).hidden = False
ws.rows(listRow2).hidden = True
end if
end sub

Private function isEmptyRange(byval oRange as range) as boolean
isEmptyRange = True
dim item as variant
for each item in oRange.Value2
if vba.len(vba.cstr(item)) >0 then isEmptyRange = False: Exit function
next item


End function
 
Upvote 0
Không phải bạn, mình muốn kết hợp đoạn ẩn hiện dòng từ A5:A14 với điều kiện này:
"- Nếu A12:A14 khác rỗng
, thì dòng thứ 50-:-52 được hiển thị đồng thời dòng 47-:-49 bị ẩn
- Ngược lại nếu A12:A14 = trống, thì dòng thứ 50-:-52 bị ẩn đồng thời dòng 47-:-49 sẽ hiển thị"
Thế mà không nói ngay từ đầu.
nếu A12:A14 rỗng thì cũng bị ẩn luôn, khi cần đến để gõ vào A12:A14 bạn lại phải UnHide à? và nếu A12:A14 bị ẩn thì số thứ tự của A15:A... sẽ bị sai... Do vậy tôi dể lại A2:A14 kể cả A2:A14 rỗng
Tham khảo code
Mã:
Private Sub Worksheet_Activate()
    Dim Rng As Range
    Application.ScreenUpdating = False
    Rows("5:52").EntireRow.Hidden = False
    For Each Rng In [a5:a11]
        Rng.EntireRow.Hidden = Rng.Value = ""
    Next Rng
    If Application.WorksheetFunction.CountA(Range("A12:A14")) > 0 Then
        Rows("47:49").EntireRow.Hidden = False
        Rows("50:52").EntireRow.Hidden = True
    Else
        Rows("47:49").EntireRow.Hidden = True
        Rows("50:52").EntireRow.Hidden = False
    End If
 Application.ScreenUpdating = True
End Sub
Bạn phải trả về chế độ cập nhật màn hình nữa chứ
 
Upvote 0
Uầy, bạn đính kèm cái file đó trong tất cả các bài làm gì đâu:D
Đọc mà không hiểu. Logic bạn đưa ra không khó, nhưng nó có thể sử dụng được. Và tồn tại ở các vấn đề sau:
1. Khi Hide phần CDT đi thì số lượng TVGS phải nhảy lại là số 1 chứ ?
2. Khi nào thì dùng mẫu nào ?
---------
Tất cả công việc này rất đơn giản là tạo ra 2 hình thức, phù hợp với 2 trường hợp.

Mã:
Bảng tính phụ bản riêng tư_Kích hoạt()
    Dim Rng Như Phạm Vi
    Ứng dụng.ScreenUpdating = Sai
    Đối với mỗi Rng trong [A5:A14]
        Rng.EntireRow.Hidden = Rng.Value = ""
    Rng tiếp theo
        [A47:A49].EntireRow.Hidden = [A12].Giá trị <> ""
        [A50:A52].EntireRow.Hidden = [A12].Value = ""
   Application.ScreenUpdating = Đúng
Kết thúc Sub
Cảm ơn bạn rất nhiều! Đúng ý mình luôn
Mục (1) và (2) mình đã giải quyết xong rồi, mình chỉ muốn hỏi ý chính về mã VBA thôi (vì phần này mình còn mù tịt), phần công thức thì mình nắm tương đối ổn
Một lần nửa cảm ơn bạn!
 
Upvote 0
1- Kết quả là thế nào, trong khi hai sự kiện này có đặc biệt độc lập với nhau? Một cái là khi activate sheet, 1 cái là thay đổi ô giá trị?
Bạn cứ để chung vào 1 bảng tính module là đựơc mà
2- Đoạn mã này:
PHP:
 Rng.EntireRow.Hidden = Rng.Value = ""
Mình không biết có hoạt động đúng ý bạn hay không nhưng mình không hiểu ya1 bạn muốn code làm gì, và tại sao có 2 dấu "="
???
Thực ra file này có nhiều sheet, có 1 sheet dữ liệu gốc, sheet này chỉ để xuất ra biên bản thôi. Do các vấn đề về công thức mình đã giải quyết được, riêng cái mã VBA thì mình chịu nên cắt ra cho bớt rườm rà
Còn dấu "" là mình trích lại vấn đề mình đưa ra ban đầu đó
Bài đã được tự động gộp:

Cảm ơn cả nhà đã quan tâm, giúp đỡ, mình đã làm được rồi :nhịp:
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom