Xin code ẩn hiện dòng đã merge cells khi trống dữ liệu (1 người xem)

Liên hệ QC

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

quoccuonghd

Thành viên hoạt động
Tham gia
12/6/10
Bài viết
116
Được thích
7
Giới tính
Nam
Nghề nghiệp
Kỹ sư XD
Nhờ các anh chị em viết cho xin code ẩn hiện dòng đã merge cells theo điều kiện.
VD có một bảng tính có các ô được merge cells và ô này link tới một dữ liệu trên file . trường hợp nếu có dữ liệu link thì dòng này tự hiện còn nếu không có thì dòng này tự ẩn. nhưng chỉ ẩn hiện trong giới hạn từ dòng này đến dòng kia thôi chứ không phải cả sheets.
Thank's.
 
Nhờ các anh chị em viết cho xin code ẩn hiện dòng đã merge cells theo điều kiện.
VD có một bảng tính có các ô được merge cells và ô này link tới một dữ liệu trên file . trường hợp nếu có dữ liệu link thì dòng này tự hiện còn nếu không có thì dòng này tự ẩn. nhưng chỉ ẩn hiện trong giới hạn từ dòng này đến dòng kia thôi chứ không phải cả sheets.
Thank's.
Đưa file Excel lên đi bạn, nói khơi khơi như vậy thì khó đấy.
 
Upvote 0
Trước hết, tôi đề xuất một ý nhỏ xíu: Cắt ô C58 chuyển qua ô B58 để gọn gàng hơn một chút trong việc viết code.
Sau khi thực hiện việc trên thì code cho sheet BBNT 4A sẽ là như vầy:
[GPECODE=vb]Private Sub Worksheet_Activate()
Dim Rng As Range
[B34:B61].EntireRow.Hidden = False
[B34:B61].SpecialCells(4).EntireRow.Hidden = True
For Each Rng In [B38:B41]
Rng.EntireRow.Hidden = (Rng = "")
Next
End Sub[/GPECODE]
 
Upvote 0
Trước hết, tôi đề xuất một ý nhỏ xíu: Cắt ô C58 chuyển qua ô B58 để gọn gàng hơn một chút trong việc viết code.
Sau khi thực hiện việc trên thì code cho sheet BBNT 4A sẽ là như vầy:
[GPECODE=vb]Private Sub Worksheet_Activate()
Dim Rng As Range
[B34:B61].EntireRow.Hidden = False
[B34:B61].SpecialCells(4).EntireRow.Hidden = True
For Each Rng In [B38:B41]
Rng.EntireRow.Hidden = (Rng = "")
Next
End Sub[/GPECODE]

Bạn giúp mình một chút nữa là mình muốn khi ô V2 khi thay đổi số thứ tự thì CODE ẩn hiện dòng của bạn sẽ thực thi ngay. http://www.mediafire.com/download/pldtt8ls1qb0r9l/NTCV.7z
Hiện tại code của bạn đã thực thi được ẩn hiện theo ý của mình rồi chỉ có điều là cứ phải nháy sang sheets khác sau đó quay lại sheets này mới thây sự thay đổi. bạn giúp mình nhe.
 
Upvote 0
Bạn giúp mình một chút nữa là mình muốn khi ô V2 khi thay đổi số thứ tự thì CODE ẩn hiện dòng của bạn sẽ thực thi ngay. http://www.mediafire.com/download/pldtt8ls1qb0r9l/NTCV.7z
Hiện tại code của bạn đã thực thi được ẩn hiện theo ý của mình rồi chỉ có điều là cứ phải nháy sang sheets khác sau đó quay lại sheets này mới thây sự thay đổi. bạn giúp mình nhe.
Trước hết, bạn bỏ cái sub Worksheet_Activate ở bài #4 đi (bạn xóa hẳn hoặc chỉ cần thêm 1 ký tự bất kỳ vào cuối tên sub là sub sẽ không còn tác dụng)
Kế tiếp, bạn thêm 1 sub sau vào trong Module:
[GPECODE=vb]Sub ShowHideRow()
Dim Rng As Range
With Sheets("BBNT 4A")
.[B34:B53].EntireRow.Hidden = False
.[B34:B53].SpecialCells(4).EntireRow.Hidden = True
For Each Rng In .[B38:B42]
Rng.EntireRow.Hidden = (Rng = "")
Next
End With
End Sub[/GPECODE]
Cuối cùng, click phải vào cái Spin button trên sheet BBNT 4A và Assign cho nó là cái sub ShowHideRow trên.

Mà cái file của bạn có cả mớ name rác luôn, xóa đi chứ để chi cho nặng vậy?
 
Upvote 0
Trước hết, bạn bỏ cái sub Worksheet_Activate ở bài #4 đi (bạn xóa hẳn hoặc chỉ cần thêm 1 ký tự bất kỳ vào cuối tên sub là sub sẽ không còn tác dụng)
Kế tiếp, bạn thêm 1 sub sau vào trong Module:
[GPECODE=vb]Sub ShowHideRow()
Dim Rng As Range
With Sheets("BBNT 4A")
.[B34:B53].EntireRow.Hidden = False
.[B34:B53].SpecialCells(4).EntireRow.Hidden = True
For Each Rng In .[B38:B42]
Rng.EntireRow.Hidden = (Rng = "")
Next
End With
End Sub[/GPECODE]
Cuối cùng, click phải vào cái Spin button trên sheet BBNT 4A và Assign cho nó là cái sub ShowHideRow trên.

Mà cái file của bạn có cả mớ name rác luôn, xóa đi chứ để chi cho nặng vậy?
Nhưng bạn ơi mình vẫn thích nó tự động ẩn hiện như cũ mà không cần nhấn nút chỉ có điều là làm thế nào là khi V2 nhấy số thì các dòng cũng ẩn hiện theo. Ví trên file excell này bạn chuot0106 đã viết giúp mình cốt in một loạt rồi có nghĩa là khi nhấn nút in các số biên bản in thay đổi thì nội dung của biên bản này cũng cập nhật theo. nếu gán code cho nút nhấn thì lại phải in thủ công từng biên bản lâu lắm. bạn cố gắng giúp mình được ko.
 
Upvote 0
Nhưng bạn ơi mình vẫn thích nó tự động ẩn hiện như cũ mà không cần nhấn nút chỉ có điều là làm thế nào là khi V2 nhấy số thì các dòng cũng ẩn hiện theo. Ví trên file excell này bạn chuot0106 đã viết giúp mình cốt in một loạt rồi có nghĩa là khi nhấn nút in các số biên bản in thay đổi thì nội dung của biên bản này cũng cập nhật theo. nếu gán code cho nút nhấn thì lại phải in thủ công từng biên bản lâu lắm. bạn cố gắng giúp mình được ko.
Vậy thì đơn giản là chỗ nào cần dùng đến việc ẩn hiện dòng thì bạn chèn thêm câu lệnh ShowHideRow vào, tự động code trong sub này sẽ được thực thi thôi. Cụ thể là thế này: Trong code của bạn chuot0106 cơ bản sẽ gồm 2 thao tác: Cập nhật thông tin theo từng số biên bản, sau đó là in biên bản. Bạn chỉ cần chèn thêm câu lệnh ShowHideRow vào trước câu lệnh in biên bản thôi.
 
Upvote 0
Vậy thì đơn giản là chỗ nào cần dùng đến việc ẩn hiện dòng thì bạn chèn thêm câu lệnh ShowHideRow vào, tự động code trong sub này sẽ được thực thi thôi. Cụ thể là thế này: Trong code của bạn chuot0106 cơ bản sẽ gồm 2 thao tác: Cập nhật thông tin theo từng số biên bản, sau đó là in biên bản. Bạn chỉ cần chèn thêm câu lệnh ShowHideRow vào trước câu lệnh in biên bản thôi.
Bạn làm ơn chèn vào giúp mình với mình không hiểu các câu lệnh VBA lên khồn biết chèn vào chỗ nào bạn bớt chút thời gian chèn hộ mình với. code của bạn chuot0106 viết cho mình như thê này Public Sub INTOANBO()Dim i As Long, Rng As Range
Set Rng = Sheet1.Range("A8:A" & Sheet1.Range("A65500").End(xlUp).Row)
For i = 1 To Rng.Rows.Count
If Rng(i, 1) <> "" Then
Sheet2.Range("V2") = Rng(i, 1)
Sheet2.PrintOut from:=1, To:=2, Copies:=1
End If
Next i
End Sub
Public Sub INTRANG1()
Dim i As Long, Rng As Range
Set Rng = Sheet1.Range("A8:A" & Sheet1.Range("A65500").End(xlUp).Row)
For i = 1 To Rng.Rows.Count
If Rng(i, 1) <> "" Then
Sheet2.Range("V2") = Rng(i, 1)
ShowHideRow
Sheet2.PrintOut from:=1, To:=1, Copies:=1
End If
Next i
End Sub
Public Sub INTRANG2()
Dim i As Long, Rng As Range
Set Rng = Sheet1.Range("A8:A" & Sheet1.Range("A65500").End(xlUp).Row)
For i = 1 To Rng.Rows.Count
If Rng(i, 1) <> "" Then
Sheet2.Range("V2") = Rng(i, 1)
Sheet2.PrintOut from:=2, To:=2, Copies:=1
End If
Next i
End Sub
Bạn chèn cho mình ShowHideRow đoạn code trên với. Cảm ơn bạn đã nhiệt tình giúp.
 
Upvote 0
Bạn ơi thế không thêm được vào đoạn code của bạn a
 
Upvote 0
Vậy thì đơn giản là chỗ nào cần dùng đến việc ẩn hiện dòng thì bạn chèn thêm câu lệnh ShowHideRow vào, tự động code trong sub này sẽ được thực thi thôi. Cụ thể là thế này: Trong code của bạn chuot0106 cơ bản sẽ gồm 2 thao tác: Cập nhật thông tin theo từng số biên bản, sau đó là in biên bản. Bạn chỉ cần chèn thêm câu lệnh ShowHideRow vào trước câu lệnh in biên bản thôi.
Bạn giúp mình với, để mình hoàn thiện được mẫu biên bản nhằm phục vụ tăng tốc độ cho công việc. Cảm ơn bạn
 
Upvote 0
Bạn giúp mình với, để mình hoàn thiện được mẫu biên bản nhằm phục vụ tăng tốc độ cho công việc. Cảm ơn bạn
Biết thế nào nhỉ?! Bạn thử thay code sau cho sub Worksheet_Activate lúc trước xem sao:
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
If Target.Address <> "$V$2" Then Exit Sub
[B34:B53].EntireRow.Hidden = False
[B34:B53].SpecialCells(4).EntireRow.Hidden = True
For Each Rng In [B38:B42]
Rng.EntireRow.Hidden = (Rng = "")
Next
End Sub[/GPECODE]
 
Upvote 0
Biết thế nào nhỉ?! Bạn thử thay code sau cho sub Worksheet_Activate lúc trước xem sao:
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
If Target.Address <> "$V$2" Then Exit Sub
[B34:B53].EntireRow.Hidden = False
[B34:B53].SpecialCells(4).EntireRow.Hidden = True
For Each Rng In [B38:B42]
Rng.EntireRow.Hidden = (Rng = "")
Next
End Sub[/GPECODE]
Bạn ơi mình thay rồi, Code không chạy bạn ah.
 
Upvote 0
Bạn ơi mình thay rồi, Code không chạy bạn ah.
Bạn cứ để nguyên code của bạn chuot0106 như ban đầu, thêm , preview:=True vào các câu lệnh Sheet5.PrintOut..., để sub Worksheet_Change vào sheet "BBNT 4A" rồi chạy thử 1 trong 3 sub INTOANBO, INTRANG1, INTRANG2 xem có tác dụng không, tôi thấy màn hình hơi giật nhưng mà chạy được.
 
Upvote 0
Bạn cứ để nguyên code của bạn chuot0106 như ban đầu, thêm , preview:=True vào các câu lệnh Sheet5.PrintOut..., để sub Worksheet_Change vào sheet "BBNT 4A" rồi chạy thử 1 trong 3 sub INTOANBO, INTRANG1, INTRANG2 xem có tác dụng không, tôi thấy màn hình hơi giật nhưng mà chạy được.
Bạn thay vào chỗ nào trong đoạn code này chỉ giúp mình với mình ko biết thêm preview:=True vào trước hay sau.
Public Sub INTRANG1()

Dim i As Long, Rng As Range
Set Rng = Sheet1.Range("A9:A" & Sheet1.Range("A65500").End(xlUp).Row)
For i = 1 To Rng.Rows.Count
If Rng(i, 1) <> "" Then
Sheet5.Range("V2") = Rng(i, 1)
Sheet5.PrintOut from:=1, to:=1, copies:=1
End If
Next i
End Sub
Cảm ơn bạn vì phiền bạn nhiều quá nhưng cố giúp mình với.
 
Upvote 0
Bạn thay vào chỗ nào trong đoạn code này chỉ giúp mình với mình ko biết thêm preview:=True vào trước hay sau.
Public Sub INTRANG1()

Dim i As Long, Rng As Range
Set Rng = Sheet1.Range("A9:A" & Sheet1.Range("A65500").End(xlUp).Row)
For i = 1 To Rng.Rows.Count
If Rng(i, 1) <> "" Then
Sheet5.Range("V2") = Rng(i, 1)
Sheet5.PrintOut from:=1, to:=1, copies:=1
End If
Next i
End Sub
Cảm ơn bạn vì phiền bạn nhiều quá nhưng cố giúp mình với.

Bạn thích trước hay sau đều được, anh chàng Preview này cũng chỉ là một tham số của lệnh PrintOut giống như From, To, Copies thôi. Nhớ là các tham số phân cách nhau bởi dấu phẩy nhé.
 
Upvote 0
Bạn thích trước hay sau đều được, anh chàng Preview này cũng chỉ là một tham số của lệnh PrintOut giống như From, To, Copies thôi. Nhớ là các tham số phân cách nhau bởi dấu phẩy nhé.
Mình thêm preview:=True vào đoạn code thì thấy dòng code hiện lên chữ đỏ và chạy thì bị lỗi
Public Sub INTRANG1()
Dim i As Long, Rng As Range
Set Rng = Sheet1.Range("A9:A" & Sheet1.Range("A65500").End(xlUp).Row)
For i = 1 To Rng.Rows.Count
If Rng(i, 1) <> "" Then
Sheet5.Range("V2") = Rng(i, 1)
preview:=True, Sheet5.PrintOut from:=1, to:=1, copies:=1 (dong nay bao do va khi chay bi loi o dong nay)
End If
Next i
End Sub
Bạn thay trực tiếp vào file va đưa lên cho mình được không. mình cảm ơn.
 
Upvote 0
Mình thêm preview:=True vào đoạn code thì thấy dòng code hiện lên chữ đỏ và chạy thì bị lỗi
Public Sub INTRANG1()
Dim i As Long, Rng As Range
Set Rng = Sheet1.Range("A9:A" & Sheet1.Range("A65500").End(xlUp).Row)
For i = 1 To Rng.Rows.Count
If Rng(i, 1) <> "" Then
Sheet5.Range("V2") = Rng(i, 1)
preview:=True, Sheet5.PrintOut from:=1, to:=1, copies:=1 (dong nay bao do va khi chay bi loi o dong nay)
End If
Next i
End Sub
Bạn thay trực tiếp vào file va đưa lên cho mình được không. mình cảm ơn.
Chèn như vậy code nó báo lỗi là đúng rồi còn gì, sửa lại như sau:
Mã:
[FONT=Verdana]Public Sub INTRANG1()[/FONT]
[FONT=Verdana]Dim i As Long, Rng As Range[/FONT]
[FONT=Verdana]Set Rng = Sheet1.Range("A9:A" & Sheet1.Range("A65500").End(xlUp).Row)[/FONT]
[FONT=Verdana]For i = 1 To Rng.Rows.Count[/FONT]
[FONT=Verdana]If Rng(i, 1) <> "" Then[/FONT]
[FONT=Verdana]Sheet5.Range("V2") = Rng(i, 1)[/FONT]
[FONT=Verdana] Sheet5.PrintOut from:=1, to:=1, copies:=1, [/FONT][B]preview:=True '[/B][FONT=Verdana] (dong nay bao do va khi chay bi loi o dong nay)[/FONT]
[FONT=Verdana]End If[/FONT]
[FONT=Verdana]Next i[/FONT]
[FONT=Verdana]End Sub[/FONT]
 
Lần chỉnh sửa cuối:
Upvote 0
Chèn như vậy code nó báo lỗi là đúng rồi còn gì, sửa lại như sau:
Mã:
[FONT=Verdana]Public Sub INTRANG1()[/FONT]
[FONT=Verdana]Dim i As Long, Rng As Range[/FONT]
[FONT=Verdana]Set Rng = Sheet1.Range("A9:A" & Sheet1.Range("A65500").End(xlUp).Row)[/FONT]
[FONT=Verdana]For i = 1 To Rng.Rows.Count[/FONT]
[FONT=Verdana]If Rng(i, 1) <> "" Then[/FONT]
[FONT=Verdana]Sheet5.Range("V2") = Rng(i, 1)[/FONT]
[FONT=Verdana] Sheet5.PrintOut from:=1, to:=1, copies:=1, [/FONT][B]preview:=True '[/B][FONT=Verdana] (dong nay bao do va khi chay bi loi o dong nay)[/FONT]
[FONT=Verdana]End If[/FONT]
[FONT=Verdana]Next i[/FONT]
[FONT=Verdana]End Sub[/FONT]
Cảm ơn chuot0106 đã ra tay giúp. mình vẫn đang hoàn thiện cái biên bản hôm vừa rồi nhờ bạn viết giúp hộ code mà vẫn chưa xong. Bạn hộ nốt mình code này đi mình cũng vừa thay code của bạn vào nhưng nó chỉ view nên thôi chứ không in ra giấy như trước mà khi view lên rồi thì lại phải đóng từng biên bản lại một.
Bạn giúp mình thêm vào code của bạn nghiaphuc dưới đây để khi ô v2 chuyển số biieen bản khác thì các dòng đã merge cells sẽ ẩn hiện theo điều kiện có dữ liệu thì hiện không có dữ liệu thì ẩn Private Sub Worksheet_Activate() Dim Rng As Range
[B34:B61].EntireRow.Hidden = False
[B34:B61].SpecialCells(4).EntireRow.Hidden = True
For Each Rng In [B38:B41]
Rng.EntireRow.Hidden = (Rng = "")
Next
End Sub
 
Upvote 0
Cảm ơn chuot0106 đã ra tay giúp. mình vẫn đang hoàn thiện cái biên bản hôm vừa rồi nhờ bạn viết giúp hộ code mà vẫn chưa xong. Bạn hộ nốt mình code này đi mình cũng vừa thay code của bạn vào nhưng nó chỉ view nên thôi chứ không in ra giấy như trước mà khi view lên rồi thì lại phải đóng từng biên bản lại một.
Bạn giúp mình thêm vào code của bạn nghiaphuc dưới đây để khi ô v2 chuyển số biieen bản khác thì các dòng đã merge cells sẽ ẩn hiện theo điều kiện có dữ liệu thì hiện không có dữ liệu thì ẩn PrivateSubWorksheet_Activate() Dim Rng As Range
[B34:B61].EntireRow.Hidden = False
[B34:B61].SpecialCells(4).EntireRow.Hidden = True
For Each Rng In [B38:B41]
Rng.EntireRow.Hidden = (Rng = "")
Next
End Sub
Bạn có biết việc thêm tham số Preview:=True vào lệnh PrintOut nhằm mục đích gì không? Nó được đưa vào để bạn xem trước khi in (mục đích là để đỡ tốn giấy đó mà), muốn in luôn thì bạn xóa cái anh chàng Preview:=True kia đi.

Tuy nhiên bạn vẫn chưa trả lời vấn đề tôi hỏi ở bài #14, nghĩa là sau khi thực hiện chuỗi thao tác trên và chạy 1 trong 3 sub của bạn chuot0106 thì kết quả bạn nhìn thấy là thế nào? Các dòng trống có được ẩn đi và các dòng có dữ liệu có được hiện lại không?
 
Upvote 0
Bạn có biết việc thêm tham số Preview:=True vào lệnh PrintOut nhằm mục đích gì không? Nó được đưa vào để bạn xem trước khi in (mục đích là để đỡ tốn giấy đó mà), muốn in luôn thì bạn xóa cái anh chàng Preview:=True kia đi.

Tuy nhiên bạn vẫn chưa trả lời vấn đề tôi hỏi ở bài #14, nghĩa là sau khi thực hiện chuỗi thao tác trên và chạy 1 trong 3 sub của bạn chuot0106 thì kết quả bạn nhìn thấy là thế nào? Các dòng trống có được ẩn đi và các dòng có dữ liệu có được hiện lại không?
Mình kiểm tra rồi thấy sau khi thêm Preview:=True in thử thì thấy dòng đang ẩn có nội dung thì sẽ hiện lại còn dòng không có nội dung thì lại không thấy ẩn lại. mình rất thích code của bạn ở bài #4 chỉ có điều mình muốn có cách nào khi V2 chuyển số BB khác thì các dòng đó nó tự ẩn hiện thì tốt quá.
 
Upvote 0

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

Back
Top Bottom