Table co giãn dòng theo dữ liệu (1 người xem)

Liên hệ QC

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

loinguyen212

Thành viên thường trực
Tham gia
21/2/14
Bài viết
254
Được thích
35
Xin chào tất cả mọi người,
Em thao tác trên table và đang mong muốn một giải pháp để hoàn thiện hơn. Giả sử tạo một table trống với các title là cố định (số cột cố định), khi viết các đoạn code để copy một vùng dữ liệu nào đó rồi paste spesial value đổ dữ liệu vào table lần đầu thì ok, những lần sau nếu dữ liệu copy được ngắn hơn (số dòng ngắn hơn) thì table sẽ không tự co ngắn đủ vùng dữ liệu đã paste. Đặc biệt là khi sử dụng advanced filter thì đổ dữ liệu lần đầu cũng không tự nhận. Mỗi lần dữ liệu sẽ thay đổi (số dòng thay đổi) làm cách nào để table nhận dữ liệu vào và nhận đúng số dòng của tập dữ liệu. Mong nhận được sự giúp đỡ.
Thân!
 
Xin chào tất cả mọi người,
Em thao tác trên table và đang mong muốn một giải pháp để hoàn thiện hơn. Giả sử tạo một table trống với các title là cố định (số cột cố định), khi viết các đoạn code để copy một vùng dữ liệu nào đó rồi paste spesial value đổ dữ liệu vào table lần đầu thì ok, những lần sau nếu dữ liệu copy được ngắn hơn (số dòng ngắn hơn) thì table sẽ không tự co ngắn đủ vùng dữ liệu đã paste. Đặc biệt là khi sử dụng advanced filter thì đổ dữ liệu lần đầu cũng không tự nhận. Mỗi lần dữ liệu sẽ thay đổi (số dòng thay đổi) làm cách nào để table nhận dữ liệu vào và nhận đúng số dòng của tập dữ liệu. Mong nhận được sự giúp đỡ.
Thân!

Post file cụ thể đi nào.
 
Xin chào tất cả mọi người,
Em thao tác trên table và đang mong muốn một giải pháp để hoàn thiện hơn. Giả sử tạo một table trống với các title là cố định (số cột cố định), khi viết các đoạn code để copy một vùng dữ liệu nào đó rồi paste spesial value đổ dữ liệu vào table lần đầu thì ok, những lần sau nếu dữ liệu copy được ngắn hơn (số dòng ngắn hơn) thì table sẽ không tự co ngắn đủ vùng dữ liệu đã paste. Đặc biệt là khi sử dụng advanced filter thì đổ dữ liệu lần đầu cũng không tự nhận. Mỗi lần dữ liệu sẽ thay đổi (số dòng thay đổi) làm cách nào để table nhận dữ liệu vào và nhận đúng số dòng của tập dữ liệu. Mong nhận được sự giúp đỡ.
Thân!
PHP:
Sub Click()
Dim Arr(), Darr(1 To 65536, 1 To 3), I As Long, J As Long, K As Long
With Sheet1
Arr = .Range("C8", .[C56536].End(xlUp)).Resize(, 3)
End With
For I = 1 To UBound(Arr, 1)
      For J = 1 To 2
            K = K + 1
            Darr(K, 1) = Arr(I, 1)
            Darr(K, 2) = Arr(I, 2)
            Darr(K, 3) = Arr(I, 3)
      Next J
Next I
    With Sheet2
        .Range("C8:E2000").ClearContents
        .Range("C8:E2000").Borders.LineStyle = xlNone
        .Range("C8").Resize(K, 3) = Darr
        .Range("C8").Offset(K).Value = "Phát sinh trong k" & ChrW(7923)
        
        Borders Sheet2.Range("C8").Resize(K, 3)
        Borders Sheet2.Range("C8").Offset(K, 0).Resize(1, 3)
    End With
  
End Sub
PHP:
Sub Borders(Rng As Range)
Dim I As Long
On Error Resume Next
     
    With Rng
    For I = 7 To 12
        .Borders(I).LineStyle = 1
        .Borders(I).Weight = IIf(I = 12, 1, 2)
    Next
    End With
End Sub
Giả sử C8:E100 sheet1 có số liệu nhé.
 
Giả sử C8:E100 sheet1 có số liệu nhé.
Cảm ơn bác Comet đã giúp đỡ nhiệt tình. Đoạn code trên rất hay, em đã tets thử. Nhưng ngặt cái hình như bác chưa đưa Table của em (như em nêu ở trên) vào thì phải, vì khi em để sheet trống thì code chạy ok, nhưng khi em thêm một table vào C8:E15 (giả dụ) thì code chạy bị lỗi bắt đầu từ with sheet2. Bác xem lại giúp em với.
Thân!
 
Cảm ơn bác Comet đã giúp đỡ nhiệt tình. Đoạn code trên rất hay, em đã tets thử. Nhưng ngặt cái hình như bác chưa đưa Table của em (như em nêu ở trên) vào thì phải, vì khi em để sheet trống thì code chạy ok, nhưng khi em thêm một table vào C8:E15 (giả dụ) thì code chạy bị lỗi bắt đầu từ with sheet2. Bác xem lại giúp em với.
Thân!
Đúng là đoạn này ko đưa vào bảng như yêu cầu là vì mình thấy bạn hay dùng table nhưng khi dùng code rồi thì chức năng tự chèn công thức ko c òn tác dụng. Nhất thiết phải đưa vào Table hay ko , hay bạn có lý do riêng,hơn nữa ít nhất bạn nên có file đính kèm, nếu mình ko làm dược thì có các anh chị khác giúp đỡ
 
Đúng là đoạn này ko đưa vào bảng như yêu cầu là vì mình thấy bạn hay dùng table nhưng khi dùng code rồi thì chức năng tự chèn công thức ko c òn tác dụng. Nhất thiết phải đưa vào Table hay ko , hay bạn có lý do riêng,hơn nữa ít nhất bạn nên có file đính kèm, nếu mình ko làm dược thì có các anh chị khác giúp đỡ
Về việc đưa vào Table thì em rất thích, tự động chèn công thức chỉ là một phần của table. Ban đầu em cũng đã tạo file, nhưng trong file chỉ có một table trống thì cũng không hay và tải lên thêm nặng. Ở trong file không có dữ liệu bởi em đang muốn tham khảo thêm các tính năng hay của table khi được áp vào code (table bình thường cũng đã rất hay), mà điển hình ở đây là ví dụ em nêu ở trên. Bác Comet rất nhiệt tình, cảm ơn bác góp ý cho em, chúc bác ngon giấc.
 
Về việc đưa vào Table thì em rất thích, tự động chèn công thức chỉ là một phần của table. Ban đầu em cũng đã tạo file, nhưng trong file chỉ có một table trống thì cũng không hay và tải lên thêm nặng. Ở trong file không có dữ liệu bởi em đang muốn tham khảo thêm các tính năng hay của table khi được áp vào code (table bình thường cũng đã rất hay), mà điển hình ở đây là ví dụ em nêu ở trên. Bác Comet rất nhiệt tình, cảm ơn bác góp ý cho em, chúc bác ngon giấc.
PHP:
Sub CreateTable()
    Dim LOB As ListObject
    Set LOB = Sheet2.ListObjects.Add(xlSrcRange, Range("$C$8:$E$16"), , xlYes)
    LOB.Name = "Table1"
    LOB.TableStyle = "TableStyleLight2"
End Sub
PHP:
With Sheet2.ListObjects("Table1").Range
        .Borders.LineStyle = xlNone
        .Range("a2").Resize(K, 3) = Darr
    End With
Bạn thử bỏ hắn sub bo rders xem sao
 
Lần chỉnh sửa cuối:
Bạn chay Sub cre trước nhé, sau đó chạy sub click, chưa đúng yêu cầu bạn lắm nhưng thấy cho vào được table (copy vào table)
 
Bạn chay Sub cre trước nhé, sau đó chạy sub click, chưa đúng yêu cầu bạn lắm nhưng thấy cho vào được table (copy vào table)
Bác dần hiểu được ý em rồi. Vì trên đây em đã nói là sẽ tự tạo tay một table sẵn trước nên ở đây có thể bỏ qua Sub create. Bây giờ bác thử chạy đoạn code liên quan đến advanced filter để đổ dữ liệu vào table đó bác sẽ thấy nó không tự động nhận vào table. Em nghĩ là bác sẽ có giải pháp hay cho vấn đề đó giúp em. Bác thử rồi báo lại cho em với nhé.
Thân!
 
Bác dần hiểu được ý em rồi. Vì trên đây em đã nói là sẽ tự tạo tay một table sẵn trước nên ở đây có thể bỏ qua Sub create. Bây giờ bác thử chạy đoạn code liên quan đến advanced filter để đổ dữ liệu vào table đó bác sẽ thấy nó không tự động nhận vào table. Em nghĩ là bác sẽ có giải pháp hay cho vấn đề đó giúp em. Bác thử rồi báo lại cho em với nhé.
Thân!
Cho vào thì vẫn cho vào được thôi
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)


    Application.EnableEvents = False
    Range("Table1").ClearContents
    If Target.Address = "$C$3" Then
    Sheet1.[C7:E17].AdvancedFilter 2, Sheet2.Range("C2:C3"), Sheet2.Range("Table1")
    End If
    Application.EnableEvents = True
End Sub
Bạn chép sự kiện vào sheet2
PHP:
Sub copy()
With Sheet1.UsedRange
    .AutoFilter field:=1, Criteria1:="Nguy?n V?n B"
    .SpecialCells(xlCellTypeVisible).copy Sheet2.Range("Table1")
    .AutoFilter
End With
End Sub
Đoạn này cũng nhận nhé. Mình thử thấy ok
 

File đính kèm

Lần chỉnh sửa cuối:
Cho vào thì vẫn cho vào được thôi. Đoạn này cũng nhận nhé. Mình thử thấy ok
Đây đây, bây giờ bác chỉnh thế này nhé, table kia bác chỉ tạo nó với 1 dòng thôi (2 cũng được, miễn là ít hơn số dòng lọc được, vì ở đây là 3 dòng), rồi bác chọn tên cho code chạy, bác sẽ thấy ngay điều em nói. Chấm xuống dòng:-=
Hiện tại ở đây của bác đang tạo cho số dòng table nhiều lên (vì mình có thể căn được) nhưng em đang nói trong trường hợp mình không căn được (ví dụ nó cứ dài lên mãi), hoặc đơn giản là table này khi nhận xong dữ liệu thì đang có những dòng trống, mà vấn đề em lại đang muốn nó nhận đúng với số dòng dữ liệu lúc nhận vào thôi. Bác hiểu ý em chưa ạ? Quả thật khi trao đổi bác cho em nhiều kiến thức rất hay. Thank so much!
P/s: Cho em hỏi con số "2" sau AdvancedFilter có tác dụng gì? vì em cũng thấy có code thì dùng 3, code thì dùng 8... nhưng chưa rõ công dụng.
Thân!
 
Lần chỉnh sửa cuối:
Đây đây, bây giờ bác chỉnh thế này nhé, table kia bác chỉ tạo nó với 1 dòng thôi (2 cũng được, miễn là ít hơn số dòng lọc được, vì ở đây là 3 dòng), rồi bác chọn tên cho code chạy, bác sẽ thấy ngay điều em nói. Chấm xuống dòng:-=
Hiện tại ở đây của bác đang tạo cho số dòng table nhiều lên (vì mình có thể căn được) nhưng em đang nói trong trường hợp mình không căn được (ví dụ nó cứ dài lên mãi), hoặc đơn giản là table này khi nhận xong dữ liệu thì đang có những dòng trống, mà vấn đề em lại đang muốn nó nhận đúng với số dòng dữ liệu lúc nhận vào thôi. Bác hiểu ý em chưa ạ? Quả thật khi trao đổi bác cho em nhiều kiến thức rất hay. Thank so much!
P/s: Cho em hỏi con số "2" sau AdvancedFilter có tác dụng gì? vì em cũng thấy có code thì dùng 3, code thì dùng 8... nhưng chưa rõ công dụng.
Thân!
Đang bận làm báo cáo tài chính lắm bạn ỏi, thingr thoảng lại phát sinh ko chạy theo kịp,
advanced 1: XlFilter ACtion
Advanced 2: xlFilter In Place
Hai cái này chắc bạn hiểu
3 và 8 đó là AutoFilter ( ghi đủ phải có Field:=, Copytorange:=)
Field:= 3 nghĩa là lọc cột số 3
Bạn nhờ anh chị khác giúp thêm nhé,
 
Web KT

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

Back
Top Bottom