Ô được tô màu nhảy lung tung

Liên hệ QC

lameco411

Thành viên hoạt động
Tham gia
27/11/15
Bài viết
162
Được thích
63
Em chào các bác!

Em làm một cái sơ đồ kho như hình, em có dùng formating condition để tô màu chữ S là màu tím, chữ A là màu xanh. Nhưng do tính chất công việc nên việc dời những kiện nhôm này đi thường xuyên nên em di chuyển bằng cách kéo thả, sau một thời gian sử dụng những ô được em định dạng nó chạy lung tung như thế này. Các bác có cách nào cố định lại giúp em sao cho khi kéo thả thì vùng được tô màu không thay đổi không ạ?
1538447830537.png
 

File đính kèm

  • SSX.xlsm
    559.3 KB · Đọc: 6
Em chào các bác!

Em làm một cái sơ đồ kho như hình, em có dùng formating condition để tô màu chữ S là màu tím, chữ A là màu xanh. Nhưng do tính chất công việc nên việc dời những kiện nhôm này đi thường xuyên nên em di chuyển bằng cách kéo thả, sau một thời gian sử dụng những ô được em định dạng nó chạy lung tung như thế này. Các bác có cách nào cố định lại giúp em sao cho khi kéo thả thì vùng được tô màu không thay đổi không ạ?
View attachment 204889
Làm việc trên Excel tối kỵ mấy việc sau:
- Xóa dòng, xóa cột
- Chèn dòng, chèn cột
- Merge cells
- Cut/paste <==> tương đương với động tác nắm chuột kéo thả
Nếu bạn không thể cưỡng lại những thói quen trên thì thôi đừng dùng conditional formating nữa, dùng code VBA mà tô. Cứ kéo xả láng, khi nào cần thì bấm nút cho code tô lại.
Vậy thôi
 
Làm việc trên Excel tối kỵ mấy việc sau:
- Xóa dòng, xóa cột
- Chèn dòng, chèn cột
- Merge cells
- Cut/paste <==> tương đương với động tác nắm chuột kéo thả
Nếu bạn không thể cưỡng lại những thói quen trên thì thôi đừng dùng conditional formating nữa, dùng code VBA mà tô. Cứ kéo xả láng, khi nào cần thì bấm nút cho code tô lại.
Vậy thôi
Bác nói phải, em tô bằng code cho tiện.
Merge Cell thì em không chơi rồi vì thấy nó bất tiện trong việc trích lọc lắm.
Nhưng mà bác cho em hỏi tí, nếu như không được chèn dòng chèn cột thì bác có cách nào thay thế được điều đó chỉ cho em với!
Giả sử khách hàng chở hàng tới công ty em, em phải làm phiếu nhập đưa cho người ta, nhưng mà hàng chưa lựa xong nên em ghi là máy chưa lựa. Tới khi lựa xong rồi thì nó trôi qua tới hơn chục dòng rồi. Lúc đó em phải chèn dòng để ghi thêm là có những mặt hàng nào mặt hàng nào nữa.
 
Nhưng mà bác cho em hỏi tí, nếu như không được chèn dòng chèn cột thì bác có cách nào thay thế được điều đó chỉ cho em với!
Giả sử khách hàng chở hàng tới công ty em, em phải làm phiếu nhập đưa cho người ta, nhưng mà hàng chưa lựa xong nên em ghi là máy chưa lựa. Tới khi lựa xong rồi thì nó trôi qua tới hơn chục dòng rồi. Lúc đó em phải chèn dòng để ghi thêm là có những mặt hàng nào mặt hàng nào nữa.
Chứng tỏ cấu trúc dữ liệu chưa đúng chuẩn. Khi thêm dữ liệu thì cứ nhập kế tiếp chứ có liên quan gì dữ liệu đã nhập đâu mà phải chèn dòng.
 
Làm việc trên Excel tối kỵ mấy việc sau:
- Xóa dòng, xóa cột
- Chèn dòng, chèn cột
- Merge cells
- Cut/paste <==> tương đương với động tác nắm chuột kéo thả
Nếu bạn không thể cưỡng lại những thói quen trên thì thôi đừng dùng conditional formating nữa, dùng code VBA mà tô. Cứ kéo xả láng, khi nào cần thì bấm nút cho code tô lại.
Vậy thôi

Em dùng code như vầy để tô màu thì có cách nào khi kéo thả thì nó xóa định dạng ở hàng cũ đi không ạ ?
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cll As Range
If Target.Column = 1 Then
    For Each cll In Target
        If cll.Value <> "" Then
            
            cll.Select
            Selection.Resize(, Selection.Columns.Count + 3).Select
            Selection.Interior.ColorIndex = 6
        
        Else
            Selection.Resize(, Selection.Columns.Count + 3).Select
            Selection.Interior.ColorIndex = xlNone
        End If
    Next cll

End If
End Sub
 

File đính kèm

  • Tomau_tudong.xlsm
    27.2 KB · Đọc: 6
Em dùng code như vầy để tô màu thì có cách nào khi kéo thả thì nó xóa định dạng ở hàng cũ đi không ạ ?
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cll As Range
If Target.Column = 1 Then
    For Each cll In Target
        If cll.Value <> "" Then
           
            cll.Select
            Selection.Resize(, Selection.Columns.Count + 3).Select
            Selection.Interior.ColorIndex = 6
       
        Else
            Selection.Resize(, Selection.Columns.Count + 3).Select
            Selection.Interior.ColorIndex = xlNone
        End If
    Next cll

End If
End Sub
Bạn thêm dòng dưới đây vào:
PHP:
 UsedRange.Interior.ColorIndex = xlNone
Cụ thể:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    UsedRange.Interior.ColorIndex = xlNone
    Dim cll As Range
    If Target.Column = 1 Then
        For Each cll In Target
            If cll.Value <> "" Then
                cll.Select
                Selection.Resize(, Selection.Columns.Count + 3).Select
                Selection.Interior.ColorIndex = 6
            Else
                Selection.Resize(, Selection.Columns.Count + 3).Select
                Selection.Interior.ColorIndex = xlNone
            End If
        Next cll
    End If
End Sub
 
Chứng tỏ cấu trúc dữ liệu chưa đúng chuẩn. Khi thêm dữ liệu thì cứ nhập kế tiếp chứ có liên quan gì dữ liệu đã nhập đâu mà phải chèn dòng.
làm gi có cái gì gọi là chuẩn, nếu không thì sao có cái gọi là " cải tiến"
 
Bạn thêm dòng dưới đây vào:
PHP:
 UsedRange.Interior.ColorIndex = xlNone
Cụ thể:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    UsedRange.Interior.ColorIndex = xlNone
    Dim cll As Range
    If Target.Column = 1 Then
        For Each cll In Target
            If cll.Value <> "" Then
                cll.Select
                Selection.Resize(, Selection.Columns.Count + 3).Select
                Selection.Interior.ColorIndex = 6
            Else
                Selection.Resize(, Selection.Columns.Count + 3).Select
                Selection.Interior.ColorIndex = xlNone
            End If
        Next cll
    End If
End Sub

Cảm ơn bạn, nhưng khi thêm dòng code đó khi mình nhập dữ liệu vào bất cứ cột nào (B,C,D) thì nó mất tô màu ngay trong khi mục đích là muốn đánh dấu dòng đó để nhập dữ liệu cho chính xác.
 
Cảm ơn bạn, nhưng khi thêm dòng code đó khi mình nhập dữ liệu vào bất cứ cột nào (B,C,D) thì nó mất tô màu ngay trong khi mục đích là muốn đánh dấu dòng đó để nhập dữ liệu cho chính xác.
Vậy bạn thử:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    UsedRange.Interior.ColorIndex = xlNone
    Dim cll As Range
    If Not Intersect(Target, Range("A1:D1000")) Is Nothing Then
        For Each cll In Target
            If cll.Value <> "" Then
                cll.Select
                Selection.EntireRow.Select
                Selection.Interior.ColorIndex = 6
            Else
                Selection.EntireRow
                Selection.Interior.ColorIndex = xlNone
            End If
        Next cll
    End If
End Sub
 
Vậy bạn thử:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    UsedRange.Interior.ColorIndex = xlNone
    Dim cll As Range
    If Not Intersect(Target, Range("A1:D1000")) Is Nothing Then
        For Each cll In Target
            If cll.Value <> "" Then
                cll.Select
                Selection.EntireRow.Select
                Selection.Interior.ColorIndex = 6
            Else
                Selection.EntireRow
                Selection.Interior.ColorIndex = xlNone
            End If
        Next cll
    End If
End Sub

Nhập dữ liệu thì tô màu bình thường, nhưng khi xóa hoặc kéo thả dữ liệu thì báo lỗi 438 ở dòng
Else
Selection.EntireRow
 
Web KT
Back
Top Bottom