Cách tối ưu code thêm dòng

Liên hệ QC

PhanTuHuong

VBA & VB.NET for Excel & AutoCad
Thành viên danh dự
Tham gia
13/6/06
Bài viết
7,183
Được thích
24,630
Tôi có viết đoạn code lập trình sự kiện. Yêu cầu từ ô B24 trở xuống theo hàng dọc, cứ có nội dung là tự động xuống 1 dòng, dòng đó mang đầy đủ nội dung trên. Nghe thì đơn giản nhưng thực hiện khá lằng nhằng (dễ bị lỗi và treo máy), tôi đã làm nhưng chưa được ưng ý vì code khá lằng nhằng.

Hocphi.jpg


Nhờ mọi người tư vấn, tối ưu code:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim BaseCell As Range, BaseRow As Integer
    
    On Error GoTo Thoat
    
    Set BaseCell = Range("B24:B20000")
    
    If Not Intersect(BaseCell, Target) Is Nothing And IsEmpty(Target) = False And IsEmpty(Target.Offset(0, -1)) = False Then
        Rows(Target.Row).Copy
        Rows(Target.Row + 1).Select
        Selection.Insert Shift:=xlDown
        Target.Offset(1, 0).ClearContents
        Application.CutCopyMode = False
        Target.Offset(1, 0).Select
        Set Target = Range("A1")
        Set BaseCell = Nothing
        Exit Sub
    End If
Thoat:
Set BaseCell = Nothing
End Sub
 
NDU thử thêm dòng Total Row vào xem sẽ biết sự khác nhau giữa List và Table.
Đúng rồi, đây là sự khác biệt của 2003 và 2007 ---> Với Excel 2007, muốn tự động Insert dòng thì đừng Total Row ---> Sau khi xong việc ta Total vẫn không muộn
Mình thiết nghĩ mấy cái đơn giản này, mò mò 1 hồi là biết tuốt
Hic..
 
Upvote 0
Đúng rồi, đây là sự khác biệt của 2003 và 2007 ---> Với Excel 2007, muốn tự động Insert dòng thì đừng Total Row ---> Sau khi xong việc ta Total vẫn không muộn
Mình thiết nghĩ mấy cái đơn giản này, mò mò 1 hồi là biết tuốt
Hic..
Cũng không nhất thiết phải bỏ Total Row, thực ra Table của 2007 support khác với List của 2003, thay vì tự động insert dòng trắng thì ở 2007 ta dùng phím tab giống như trong Table của Word, đứng ở ô cuối cùng của dòng dữ liệu cuối nhấn phím Tab là OK. Nhưng theo như yêu cầu của bác Hướng thì nó không đáp ứng được mà chỉ có List của 2003 là đáp ứng đúng mà thôi.
 
Upvote 0
Đúng rồi, đây là sự khác biệt của 2003 và 2007 ---> Với Excel 2007, muốn tự động Insert dòng thì đừng Total Row ---> Sau khi xong việc ta Total vẫn không muộn
Mình thiết nghĩ mấy cái đơn giản này, mò mò 1 hồi là biết tuốt
Hic..
Tại anh hỏng thèm đọc bài của em mà thôi. Nó ở đây nè: http://www.giaiphapexcel.com/forum/showthread.php?t=11863
Còn nếu không thích đọc song ngữ như thế, thì em thấy trong topic này, lão chết tiệt đã nói khá rõ ràng mà...
 
Lần chỉnh sửa cuối:
Upvote 0
Còn nếu không thích đọc song ngữ như thế, thì em thấy trong topic này, lão chết tiệt đã nói khá rõ ràng mà...
Có viết, có file kèm theo, nhưng không đầy đủ bằng nguyên 1 topic của BNTT.
Bây giờ mò mò thêm (ndu's word), mới thấy:
- Khi nhập liệu từ trái qua phải đến hết dòng, mà dùng phím tab, thì khi tab ô cuối, sẽ insert dòng và copy công thức, dù cho có dòng total hiển thị hay không. Ghi chú là insert dòng, nghĩa là đẩy dữ liệu bên dưới table xuống, chứ không phải nối dòng vào table
- Khi dùng chuột điều chỉnh tăng kích thước table bằng cái nút tam giác ở góc dưới bên phải, table tự động giãn dòng và điền công thức vào các dòng mới nối thêm. Ghi chú là nối thêm dòng vào table, nghĩa là nối luôn dữ liệu bên dưới table vào table, nếu nhằm cột có công thức thì chức năng copy công thức cột đó bị mất.
- Nếu gõ dữ liệu vào 1 trong các ô liền kề table, table tự động nới rộng ra 1 cột hoặc 1 dòng, không chèn, không đẩy dữ liệu ngoài table xuống.
- Trong 1 cột trống của table, gõ công thức tính toán cho1 ô (bất cứ ô nào), lập tức cả cột sẽ có công thức y chang.
- Và nhiều cái nữa.
 
Upvote 0
Code chèn thêm dòng!

Chào cả nhà GPE!
Em nhờ anh chị GPE viết dùm em đoạn code để khi nhập liệu thì dòng tự thêm dòng (câu hỏi đã có trong file đính kèm). Thanks
 

File đính kèm

Upvote 0
Chào cả nhà GPE!
Em nhờ anh chị GPE viết dùm em đoạn code để khi nhập liệu thì dòng tự thêm dòng (câu hỏi đã có trong file đính kèm). Thanks
------
Nếu được bạn có thể cho biết dùng để làm gì không? ( tôi thấy lạ quá )
 
Upvote 0
Bạn chọn dòng tiêu đề và dòng trắng đầu --> Click phải --> Create List --> Tick vào My list has headers.
Mỗi lần bạn chọn vào list này và nhập dữ liệu vào dòng có đánh dấu * thì dòng Cộng sẽ tự động bị đẩy xuống. Xem file đính kèm.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn tìm với từ khóa List sẽ thấy cách chèn dòng và copy công thức rất hay, không code kiết gì cả. Làm mẫu 1 cái cho bạn xem.
 

File đính kèm

Upvote 0
Chào cả nhà GPE!
Em nhờ anh chị GPE viết dùm em đoạn code để khi nhập liệu thì dòng tự thêm dòng (câu hỏi đã có trong file đính kèm). Thanks
Copy Macro này vào worksheet.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect([B:B], Target) Is Nothing And Target.Cells.Count = 1 Then
If Target.Value <> "" Then Target.Offset(1).EntireRow.Insert
End If
End Sub
 
Upvote 0
Copy Macro này vào worksheet.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect([B:B], Target) Is Nothing And Target.Cells.Count = 1 Then
If Target.Value <> "" Then Target.Offset(1).EntireRow.Insert
End If
End Sub

Anh ơi, nếu nhập DL vào thì chèn thêm dòng như code anh gửi. Nhưng giả thiết nếu em xóa DL đó đi thì em muốn dòng đó mất đí (hay tự xóa)? Anh vui lòng thiết kế cho em thêm đoạn macro nhé!? Thanks
 
Upvote 0
Anh ơi, nếu nhập DL vào thì chèn thêm dòng như code anh gửi. Nhưng giả thiết nếu em xóa DL đó đi thì em muốn dòng đó mất đí (hay tự xóa)? Anh vui lòng thiết kế cho em thêm đoạn macro nhé!? Thanks
Nếu bạn muốn xóa dòng thì cứ việc xóa dòng. Việc gì phải thông qua Macro. Yêu cầu không hợp lý và không có tính ứng dụng.
 
Upvote 0
dùng cái list không thích hợp ở một số trường hợp trong một sheet có nhiều bảng kèm theo, nó mắc cái head thế là toi mạng. cái list chỉ sài cho bảng đơn giản bảng đơn thoai. có cái nào khác không các pác ơi. thấy mình cũng cần đây
 
Upvote 0
Web KT

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

Back
Top Bottom