Code ẩn dòng trống!!!

Liên hệ QC

anhbatt

Thành viên mới
Tham gia
27/10/09
Bài viết
38
Được thích
2
Chào các bạn!
Tôi có đoạn code làm ẩn các dòng trống trong một vùng dữ liệu A4:L25, trong đó có các dòng trống. tôi muốn ẩn nó đi để tiện cho việc in ấn (khỏi phải vào in khu vực....),
các bạn xem coi nó bị lỗi gì vậy?

Mã:
Sub an_dong()
 Dim r As Integer
   Sheets("sheet2").Select  
   For i = 4 To 25 'Step 1   'kiem tra xem từ dòng 4 đến dòng 24 neu o A4 ... A25 trống thì 
                                                                     ẩn luon dong chứa ô đó
     If Sheets("sheet2").Cells(i, 1).Value = "" Then
            Sheets("sheet2").Rows("i:i").EntireRow.Hidden = True
        End If
    Next
End Sub
 
Chào các bạn!
Tôi có đoạn code làm ẩn các dòng trống trong một vùng dữ liệu A4:L25, trong đó có các dòng trống. tôi muốn ẩn nó đi để tiện cho việc in ấn (khỏi phải vào in khu vực....),
các bạn xem coi nó bị lỗi gì vậy?

Mã:
Sub an_dong()
 Dim r As Integer
   Sheets("sheet2").Select  
   For i = 4 To 25 'Step 1   'kiem tra xem từ dòng 4 đến dòng 24 neu o A4 ... A25 trống thì 
                                                                     ẩn luon dong chứa ô đó
     If Sheets("sheet2").Cells(i, 1).Value = "" Then
            Sheets("sheet2").Rows("i:i").EntireRow.Hidden = True
        End If
    Next
End Sub
Viết Rows("i:i") là sai
Phải vầy: Rows(i & ":" & i)
Dòng này:
Sheets("sheet2").Rows("i:i").EntireRow.Hidden = True
Có thể viết kiểu khác
Sheets("sheet1").Cells(i, 1).EntireRow.Hidden = True
---------
Gọn nhất là
PHP:
Sub an_dong()
 On Error Resume Next
  With Sheets("sheet1").Range("A4:A25")
    .SpecialCells(4).EntireRow.Hidden = True
   End With
End Sub
 
Upvote 0
Viết Rows("i:i") là sai
Phải vầy: Rows(i & ":" & i)
Dòng này:
Sheets("sheet2").Rows("i:i").EntireRow.Hidden = True
Có thể viết kiểu khác
Sheets("sheet1").Cells(i, 1).EntireRow.Hidden = True
---------
Gọn nhất là
PHP:
Sub an_dong()
 On Error Resume Next
  With Sheets("sheet1").Range("A4:A25")
    .SpecialCells(4).EntireRow.Hidden = True
   End With
End Sub
Cảm ơn thầy!
Thầy có thể giải thích dùm tôi: .SpecialCells(4) là gì không ạ?
cảm ơn!!
 
Upvote 0
Cảm ơn thầy!
Thầy có thể giải thích dùm tôi: .SpecialCells(4) là gì không ạ?
cảm ơn!!
Nó tương đương với việc bạn quét chọn A4:A25 rồi bấm Ctrl + G\Special... và chọn Blanks
Tức chọn những cell rổng ---> Vậy thì cần 1 lần là có thể chọn được tất cả mà không cần qua vòng lập For ---> Đương nhiên nó cũng sẽ cho tốc độ nhanh hơn gấp nhiều lần
 
Upvote 0
Nó tương đương với việc bạn quét chọn A4:A25 rồi bấm Ctrl + G\Special... và chọn Blanks
Tức chọn những cell rổng ---> Vậy thì cần 1 lần là có thể chọn được tất cả mà không cần qua vòng lập For ---> Đương nhiên nó cũng sẽ cho tốc độ nhanh hơn gấp nhiều lần
Nhưng tôi vừa làm thử mà kết quả chẳng có dòng nào ẩn cả.
thầy xem giúp tôi nha!
Mã:
tôi có các ô a4 = 1
                 a5 = 1
             .......
                  a10 = 1
                 a11 = "" (rỗng)
               ...........
              a25 = ""
              a26 = 1
vậy thì nó phải ẩn dòng 11 đến dòng 25 chứ nhưng đằng này nó không ẩn dòng nào cả.
Tôi không thể tải file ví dụ lên được nên phải chịu khó làm thế này thôi. Tôi không biết diễn đàn bị lỗi gì nữa mà không tải kèm file được.
mong thầy thông cảm
 
Upvote 0
Nhưng tôi vừa làm thử mà kết quả chẳng có dòng nào ẩn cả.
thầy xem giúp tôi nha!
Mã:
tôi có các ô a4 = 1
                 a5 = 1
             .......
                  a10 = 1
                 a11 = "" (rỗng)
               ...........
              a25 = ""
              a26 = 1
vậy thì nó phải ẩn dòng 11 đến dòng 25 chứ nhưng đằng này nó không ẩn dòng nào cả.
Tôi không thể tải file ví dụ lên được nên phải chịu khó làm thế này thôi. Tôi không biết diễn đàn bị lỗi gì nữa mà không tải kèm file được.
mong thầy thông cảm
Theo mình thấy những ví dụ trên đã hướng dẫn cụ thể rồi. Bạn có thể nhấn F5 thay cho Ctrl + G
 
Upvote 0
PHP Code:
Sub an_dong()
On Error Resume Next
With Sheets
("sheet1").Range("A4:A25")
.
SpecialCells(4).EntireRow.Hidden = True
End With
End Sub
ý mình hỏi là sao mình chạy đoạn code trên mà chẳng thấy có dòng nào ẩn cả. Mong các bác xem lại xem code có sai chỗ nào không?
 
Upvote 0
PHP Code:
Sub an_dong()
On Error Resume Next
With Sheets
("sheet1").Range("A4:A25")
.
SpecialCells(4).EntireRow.Hidden = True
End With
End Sub
ý mình hỏi là sao mình chạy đoạn code trên mà chẳng thấy có dòng nào ẩn cả. Mong các bác xem lại xem code có sai chỗ nào không?
Nếu nó không ẩn dòng nào, có thể dử liệu tại A4:A25 là công thức (chỉ là rổng do công thức trả về chứ không phải cell rổng thật sự)
Với trường hợp này ta dùng AutoFilter ---> Bạn đưa file của bạn lên đây cho dể nhé
 
Upvote 0
PHP Code:
Sub an_dong()
On Error Resume Next
With Sheets("sheet1").Range("A4:A25")
.SpecialCells(4).EntireRow.Hidden = True
End With
End Sub
ý mình hỏi là sao mình chạy đoạn code trên mà chẳng thấy có dòng nào ẩn cả. Mong các bác xem lại xem code có sai chỗ nào không?
Hình như có vấn đề thật, nếu ô A25 có dữ liệu thì không sao ( dù có xóa đi làm lại) nhưng nếu mớ ra bảng tính ra mà A25 trống thì lại hổng chạy, mình cũng "tèo" luôn vì VBA mình rất dỏm, thôi thì bạn thử cái này xem. Còn cái của bạn sửa lại tý nhé là chạy thôi
Sub an_dong()
Dim r (cái này là i)As Integer
Sheets("sheet2").Select
For i = 4 To 25 'Step 1
If Sheets("sheet2").Cells(i, 1).Value = "" Then
Sheets("sheet2").Rows("i:i")(cái này là rows(i).EntireRow.Hidden = True
End If
Next
End Sub
Các bạn trợ giúp bạn bài này đều là các cao thủ VBA đó, mình học được rất nhiều từ các bạn ấy
Thân
 

File đính kèm

  • ANDONG.xls
    34.5 KB · Đọc: 487
Upvote 0
Hình như có vấn đề thật, nếu ô A25 có dữ liệu thì không sao ( dù có xóa đi làm lại) nhưng nếu mớ ra bảng tính ra mà A25 trống thì lại hổng chạy
Bạn nói sao tôi không hiểu?
Thôi thì tôi lấy code của tôi cho vào file bạn đây!
Kiểm tra nhé
 

File đính kèm

  • ANDONG.xls
    25.5 KB · Đọc: 300
Upvote 0
Bạn nói sao tôi không hiểu?
Thôi thì tôi lấy code của tôi cho vào file bạn đây!
Kiểm tra nhé
Thầy mở bài ra , xóa hết dữ liệu đi chỉ để vài hàng có dữ liệu phía trên ( td: A5,A7, A9 chẳng hạn). Đóng file lại nhớ save, sau đó thầy mở lại file và chạy thử xem

Thân
 
Upvote 0
Ah... Ah... Tôi biết nguyên nhân rồi, đúng như bạn concogia đã nói, nếu A25 chưa có dử liệu thì dòng này sẽ không ẩn ---> Đây là hạn chế của SpecialCells đã từng đề cập trên diển đàn rồi
Vậy ta dùng AutoFilter nhé ---> Yêu cầu là phải có 1 tiêu đề nằm phía trên
PHP:
Private Sub CommandButton1_Click()
  Dim Check As Boolean
  Check = (CommandButton1.Caption = "Hide")
  CommandButton1.Caption = IIf(Check, "Show", "Hide")
  With Sheet1.Range("A3:A25")
    If Check Then
      .AutoFilter 1, "<>", , , False
    Else
      .Parent.ShowAllData
    End If
  End With
End Sub
Xem file
Nói chung yêu cầu dạng này không nên dùng vòng lập ---> Vài chục ngàn dòng thì code chạy đến bao giờ?
 

File đính kèm

  • Andong.xls
    21.5 KB · Đọc: 368
Upvote 0
Chào concogia va ndu.....
Tôi muốn viết code ẩn dòng của một khu vực trong sheet thành một thủ tục mà khi đó ta chỉ truyền giá trị qua lời gọi cho nó như sau.
Mã:
Sub andong(rng As Range, sh as String)
On Error Resume Next
Application.ScreenUpdating = False
Dim i, j, k As Integer
 i = a.Row '
 j = a.Rows.Count
   Sheets("sh").Select
   For k = i To (i + j - 1)
   If Cells(i, 1).Value = "" Then
            Sheets("sh").Rows(i).Hidden = True
        End If
    Next
Application.ScreenUpdating = True
End Sub
Nhưng khi gọi thủ tục cho command1 là:
Mã:
Private Sub CommandButton1_Click()
andong ("A1:B6","sheet3")
End Sub
thì nó báo lỗi là sai kiểu
Mong hai bác giúp tôi sửa lỗi code với!. cảm ơn!
 
Lần chỉnh sửa cuối:
Upvote 0
Chào concogia va ndu.....
Tôi muốn viết code ẩn dòng của một khu vực trong sheet thành một thủ tục mà khi đó ta chỉ truyền giá trị qua lời gọi cho nó như sau.
Mã:
Sub andong(rng As Range, sh as String)
On Error Resume Next
Application.ScreenUpdating = False
Dim i, j, k As Integer
 i = a.Row 
 j = a.Rows.Count
   Sheets([COLOR=Red]"sh"[/COLOR]).Select [COLOR=Red]--> sh[/COLOR]
   For k = i To (i + j - 1)
   If Cells(i, 1).Value = "" Then
            Sheets([COLOR=Red]"sh"[/COLOR]).Rows(i).Hidden = True [COLOR=Red]--> sh[/COLOR]
        End If
    Next
Application.ScreenUpdating = True
End Sub
Nhưng khi gọi thủ tục cho command1 là:
Mã:
Private Sub CommandButton1_Click()
andong ([COLOR=Red]"A1:B6"[/COLOR],"sheet3") [COLOR=Red]--> [A1:B6][/COLOR]
End Sub
thì nó báo lỗi là sai kiểu
Mong hai bác giúp tôi sửa lỗi code với!. cảm ơn!

Bạn sửa lại mấy chổ màu đỏ xem sao.
 
Upvote 0
Tôi muốn viết code ẩn dòng của một khu vực của sheet thành một thủ tục mà khi ta truyền giá trị qua lời gọi cho nó như sau.
PHP:
Sub andong(rng As Range, sh as String)
On Error Resume Next
Application.ScreenUpdating = False
Dim i, j, k As Integer   '*'
 i = a.Row ' **'
 j = a.Rows.Count  '**'
   Sheets("sh").Select
   For k = i To (i + j - 1)
        If Cells(i, 1).Value = "" Then
            Sheets("sh").Rows(i).Hidden = True
        End If
    Next
Application.ScreenUpdating = True
End Sub
Nhưng khi gọi thủ tục cho command1 là:
Mã:
[B]Private Sub CommandButton1_Click()[/B]
  andong ("A1:B6","sheet3")
[B]End Sub[/B]
thì nó báo lỗi là sai kiểu

Nó báo sai kiểu thì ta phải tường minh về kiểu là điều đán làm trước tiên;
Đầu tiên bạn thử gọi như vầy xem sao:
PHP:
Private Sub CommandButton1_Click()
  andong Range("A1:B6"),"sheet3"
End Sub

Ở macro đầu, biến a của bạn là cái chi vậy, hình như nó là biến đối tượng; sao bạn không khai báo cho tường minh vào, nhất là chúng ta đang chập chững thì càng phải tường minh!
Hơn nữa các biến i & j sẽ có kiểu Variant & là không cần thiết, nhưng kiểu Integer cũng chưa chắc chắn & thích hợp lắm. Chính vì phần dưới của macro, các biến này chứa trị là số dòng nào đó của trang tính; mà đã là số dòng ta nên khai báo kiểu biến là Long.

Mình khuyên bạn không nên khai báo tên biến chỉ là 1 ký tự; Đừng nên bắt chước các vị Hàn lâm, học bài bản tư những trường chính quy. Ta là những người tự học thì phải rành mạch & khiêm nhừơng đi & cách hành xử phải khác họ chứ!

Cũng chỉ mong chúng ta cùng mau tiến bộ mà thôi!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Tôi muốn viết code ẩn dòng của một khu vực của sheet thành một thủ tục mà khi ta truyền giá trị qua lời gọi cho nó như sau.
PHP Code:
Sub andong(a As Range, sh as String)
On Error Resume Next
Application
.ScreenUpdating = False
Dim i
, j, k As Integer '*'
i = a.Row ' **'
j = a.Rows.Count '**'
Sheets("sh").Select
For k = i To (i + j - 1)
If
Cells(i, 1).Value = "" Then
Sheets
("sh").Rows(i).Hidden = True
End
If
Next
Application
.ScreenUpdating = True
End Sub

Nhưng khi gọi thủ tục cho command1 là:
Code:
Private Sub CommandButton1_Click()
andong ("A1:B6","sheet3")
End Sub
thì nó báo lỗi là sai kiểu
cảm ơn các bạn nhé, mình đã sửa lại rồi nhưng nó vẫn ko chạy.
PHP:
  Private Sub CommandButton1_Click()
  andong Range("A1:B6"),"sheet3" --> sao mình gọi andong ("A1:B6","sheet3") --> báo lỗi
End Sub
Mong các bạn giúp đỡ!
 
Upvote 0
cảm ơn các bạn nhé, mình đã sửa lại rồi nhưng nó vẫn ko chạy.
PHP:
  Private Sub CommandButton1_Click()
  andong Range("A1:B6"),"sheet3" --> sao mình gọi andong ("A1:B6","sheet3") --> báo lỗi
End Sub
Mong các bạn giúp đỡ!
Thay vì hỏi lòng vòng, bạn chỉ cần đưa file đang báo lổi của bạn lên đây là mọi việc xong ngay! Có đôi lúc cái sai nằm ở những lổi mà bạn không nhìn thấy được
 
Upvote 0
Thay vì hỏi lòng vòng, bạn chỉ cần đưa file đang báo lổi của bạn lên đây là mọi việc xong ngay! Có đôi lúc cái sai nằm ở những lổi mà bạn không nhìn thấy được
Chào ndu.....!
Tôi không tải file từ máy lên được cũng như từ url. (lỗi fail....). nên tôi mới viết như thế lên diễn đàn. Nhiều lần hỏi nhưng không giúp tôi cách tải file lên diễn đàn mà không bị lỗi "fail".
Vì thế tôi tải lên web của tôi:
link: http://sites.google.com/site/anhbatt/luu-tru/ANDONG.rar?attredirects=0&d=1
Mong bác xem! (nó ở sheet3)
 
Upvote 0
Chào ndu.....!
Tôi không tải file từ máy lên được cũng như từ url. (lỗi fail....). nên tôi mới viết như thế lên diễn đàn. Nhiều lần hỏi nhưng không giúp tôi cách tải file lên diễn đàn mà không bị lỗi "fail".
Vì thế tôi tải lên web của tôi:
link: http://sites.google.com/site/anhbatt/luu-tru/ANDONG.rar?attredirects=0&d=1
Mong bác xem! (nó ở sheet3)
Code của bạn sai quá trời luôn (lại thừa nhiều chổ)
Tôi sửa lại đây:
PHP:
Sub Andong(a As Range, sh As String)
  Dim i As Long
  On Error Resume Next
  Application.ScreenUpdating = False
  Sheets(sh).Select
  For i = i To a.Rows.Count
     If a(i, 1).Value = "" Then
       a(i, 1).EntireRow.Hidden = True
     End If
  Next
  Application.ScreenUpdating = True
End Sub
PHP:
Private Sub CommandButton1_Click()
  Andong [A1:B6], "sheet3"
End Sub
 

File đính kèm

  • ANDONG.xls
    24 KB · Đọc: 338
Upvote 0
Web KT
Back
Top Bottom