Border dòng khi ô có dữ liệu

Liên hệ QC

wuchengcai

Thành viên chính thức
Tham gia
22/6/10
Bài viết
87
Được thích
15
Mình có Bảng dữ liệu từ A3:H500, khi D3 có dữ liệu thì sẽ border A3:H3, khi D4 có dữ liệu thì sẽ border A4:H4, tương tự cho đến A500:H500.
Mình dùng code cho dòng đầu tiên A3:H3:
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("D3").Value <> "" Then
Range("A3:H3").Borders.Color = RGB(255, 0, 255)
End If
End Sub

Nhưng bảng dữ liệu của mình 500 dòng, mình không thể cope đoạn code trên và paste 500 lần.
Các thầy giúp mình chỉnh lại đoạn code nhé.
 
Mình có Bảng dữ liệu từ A3:H500, khi D3 có dữ liệu thì sẽ border A3:H3, khi D4 có dữ liệu thì sẽ border A4:H4, tương tự cho đến A500:H500.
Mình dùng code cho dòng đầu tiên A3:H3:
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("D3").Value <> "" Then
Range("A3:H3").Borders.Color = RGB(255, 0, 255)
End If
End Sub

Nhưng bảng dữ liệu của mình 500 dòng, mình không thể cope đoạn code trên và paste 500 lần.
Các thầy giúp mình chỉnh lại đoạn code nhé.
Bạn thử code này xem.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim a As Integer
    If Not Intersect(Target, Range("d3:d500")) Is Nothing Then
       If Target.Count = 1 Then
          If Target.Value <> Empty Then
             Application.EnableEvents = False
             a = Target.Row
             Range("A" & a).Resize(1, 8).Borders.Color = RGB(255, 0, 255)
             Application.EnableEvents = True
          End If
    End If
  End If
End Sub
 
Upvote 0
Chủ bài đăng chưa nêu việc hính thành 5OO dòng dữ liệu này như thế nào?
Nếu biết cách thức hình thành nên nó, ta có thể áp dụng cách Anh chàng Nghĩa hay cách khác nào đó tốt hơn
Thân!
 
Upvote 0
Mình có Bảng dữ liệu từ A3:H500, khi D3 có dữ liệu thì sẽ border A3:H3, khi D4 có dữ liệu thì sẽ border A4:H4, tương tự cho đến A500:H500.
Mình dùng code cho dòng đầu tiên A3:H3:
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("D3").Value <> "" Then
Range("A3:H3").Borders.Color = RGB(255, 0, 255)
End If
End Sub

Nhưng bảng dữ liệu của mình 500 dòng, mình không thể cope đoạn code trên và paste 500 lần.
Các thầy giúp mình chỉnh lại đoạn code nhé.
Thử code sau bạn nhập dữ liệu đến đâu không cần biết (dòng 3 phải có đủ tiêu đề đến đó).
Code trong sheet:
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Call ToVieng
End Sub

Code trong Module :
Mã:
Sub ToVieng()
    ActiveSheet.Range("A1").Offset(2).CurrentRegion.Borders.Color = RGB(255, 0, 255)
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Lỡ dữ liệu nhiều quá chắc phải uống Coffee rồi vào làm tiếp.
Gì mà nhiều với không nhiều, em để 1 triệu dòng đó, mất gì thời gian mà bảo uống cà phê, cà pháo? Hay là muốn em đi Biên Hòa cà phê?
 

File đính kèm

Upvote 0
Chủ bài đăng chưa nêu việc hính thành 5OO dòng dữ liệu này như thế nào?
Nếu biết cách thức hình thành nên nó, ta có thể áp dụng cách Anh chàng Nghĩa hay cách khác nào đó tốt hơn
Thân!
Cám ơn các bạn hỗ trợ.
Dòng code các bạn cung cấp không áp dụng vào file của mình được.
Mình gửi file cho các bạn xem và hỗ trợ giúp nhé.
 

File đính kèm

Upvote 0
Thêm đoạn code của bạn snow vào Sheet2 thử xem nhé.

213838
 
Upvote 0
Bạn thử code này xem.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim a As Integer
    If Not Intersect(Target, Range("d3:d500")) Is Nothing Then
       If Target.Count = 1 Then
          If Target.Value <> Empty Then
             Application.EnableEvents = False
             a = Target.Row
             Range("A" & a).Resize(1, 8).Borders.Color = RGB(255, 0, 255)
             Application.EnableEvents = True
          End If
    End If
  End If
End Sub
Nếu copy và dán nhiều dòng vào cột D thì sao?
Biến a chỉ dùng 1 lần hơi phí, và Application.EnableEvents có tác dụng gì vậy
 
Upvote 0
Nếu copy và dán nhiều dòng vào cột D thì sao?
Biến a chỉ dùng 1 lần hơi phí, và Application.EnableEvents có tác dụng gì vậy
Thì khỏi chạy luôn anh à.
Câu này để ngắt sự kiện. Application.EnableEvents=False đó.
Có chỗ nào không đúng anh chỉ em nhé.
 
Upvote 0
Gì mà nhiều với không nhiều, em để 1 triệu dòng đó, mất gì thời gian mà bảo uống cà phê, cà pháo? Hay là muốn em đi Biên Hòa cà phê?
Muốn sang Biên Hòa thì sáng mai chạy qua, chiều nay (22/3/2019) nhớ gọi trước cho anh để anh triệu tập mấy thành viên Biên Hòa.
 
Upvote 0
Thì khỏi chạy luôn anh à.
Câu này để ngắt sự kiện. Application.EnableEvents=False đó.
Có chỗ nào không đúng anh chỉ em nhé.
Code chạy đúng, nhưng chỉ giới hạn 1 ô "If Target.Count = 1 Then" làm hạn chế thao tác copy hoặc dùng code gán giá trị nhiều dòng ở cột D
Application.EnableEvents mình thấy không có tác dụng gì
 
Upvote 0
Thêm đoạn code của bạn snow vào Sheet2 thử xem nhé.

View attachment 213838
Vẫn không được bạn ơi. Mình cần border sheet4 (SelectedData), Sheet2 (Data) mình dùng công thức =$(Giá trị Cell)<>"" rùi.
Cái khó của border sheet4 là vì nó chứa CommandButton1 chứa lệnh "Clear", nếu không mình đã dùng công thức =$(Giá trị Cell)<>"" cho nhanh.
 
Upvote 0
Mình thấy bài đầu tiên bạn hỏi thay đổi D3, rồi D4, ... bên bạn snow viết code sự kiện Change với cột D, bạn thử nhập D3 hoặc D4 sheet SelectedData thử xem. Mình test code của bạn snow OK nhé.

213856
 
Upvote 0
Mình thấy bài đầu tiên bạn hỏi thay đổi D3, rồi D4, ... bên bạn snow viết code sự kiện Change với cột D, bạn thử nhập D3 hoặc D4 sheet SelectedData thử xem. Mình test code của bạn snow OK nhé.

View attachment 213856
Có thể do mình nêu vấn đề chưa đúng nên các bạn cung cấp code chưa đúng theo ý mình.
Dữ liệu Sheet SelectedData có được là khi ấn chọn "Select All"-->"Copy to Page2" của Sheet Data. Chứ không phải nhập thủ công vào.
Tại Sheet SelectedData sẽ dựa vào ô D để border dòng, khi ấn CommandButton1 chứa lệnh "Clear" thì dữ liệu sẽ xóa hết.
Các bạn xem lại code giúp mình nhé.
 
Upvote 0
Sửa code nút Copy to Page2" như sau xem thế nào:
Mã:
Private Sub CommandButton8_Click()
Dim sat As Long, sut As Byte, s2 As Worksheet, bu As Long

    If ListBox1.ListCount = 0 Then
     MsgBox "There Aren't Data", vbExclamation
     Exit Sub
    End If
    Set s2 = Sheets("SelectedData")
    sat = ListBox1.ListCount
    sut = ListBox1.ColumnCount
    bu = s2.Range("B" & Rows.Count).End(xlUp).Row + 1
     
    s2.Range("B" & bu & ":M" & sat + bu - 1) = ListBox1.List
    s2.Range("A" & bu).Resize(sat, 16).Borders.Color = RGB(255, 0, 255)
    MsgBox "Data Were Copied"

End Sub
 
Upvote 0
Sửa code nút Copy to Page2" như sau xem thế nào:
Mã:
Private Sub CommandButton8_Click()
Dim sat As Long, sut As Byte, s2 As Worksheet, bu As Long

    If ListBox1.ListCount = 0 Then
     MsgBox "There Aren't Data", vbExclamation
     Exit Sub
    End If
    Set s2 = Sheets("SelectedData")
    sat = ListBox1.ListCount
    sut = ListBox1.ColumnCount
    bu = s2.Range("B" & Rows.Count).End(xlUp).Row + 1
   
    s2.Range("B" & bu & ":M" & sat + bu - 1) = ListBox1.List
    s2.Range("A" & bu).Resize(sat, 16).Borders.Color = RGB(255, 0, 255)
    MsgBox "Data Were Copied"

End Sub
Mình làm được rùi. Mừng quá.
Sẵn tiện đây giúp mình Border phần nội dung trong ListBox1 UserForm và kiểm tra lỗi filter UserForm:
(1) Khi chọn "Level" ở ComboBox1 và gõ level "1" vào TextBox13 thì ListBox1 lọc ra luôn cả 10 và 11, dẫn đến kết quả đếm ở Label15 sai luôn.
(2) Khi chọn Staff Name (CN) và Staff Name (Vie) thì chỉ lọc được HỌ, giúp mình chỉnh code lọc theo TÊN nhé.
Cám ơn bạn nhiệt tình hỗ trợ.
 

File đính kèm

  • Error filter Level.JPG
    Error filter Level.JPG
    177.1 KB · Đọc: 4
Upvote 0
Sử dụng Like tìm chính xác thì bỏ "*", tìm tương đối cả chuỗi thì dùng "*" cả trước và sau.
Level: bạn bỏ phần "*" ra.
Staff Name (CN) và Staff Name (Vie) thì thêm "*" vào trước và sau chuỗi cần tìm.
 

File đính kèm

Upvote 0
Sử dụng Like tìm chính xác thì bỏ "*", tìm tương đối cả chuỗi thì dùng "*" cả trước và sau.
Level: bạn bỏ phần "*" ra.
Staff Name (CN) và Staff Name (Vie) thì thêm "*" vào trước và sau chuỗi cần tìm.
Giúp mình add cái này luôn nhé: "Sẵn tiện đây giúp mình Border phần nội dung trong ListBox1 UserForm ......"
 
Upvote 0
Web KT

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

Back
Top Bottom