Xin chào tất cả các bạn có tinh thần ham học và tự học VBA
Với những người tự học VBA thì việc đọc và sao chép code của chức năng Record Macro là điều không có gì xa lạ. (Đó gần như là 1 kỹ năng cần phải có khi tự học VBA)
Tuy nhiên đôi khi code trong Record Macro lại không cho ta kết quả như ý khi áp dụng vào 1 vấn đề tương tự
Và tôi xin chia sẻ với các bạn 1 tình huống như sau:
Hôm trước trong lúc làm việc tôi phát sinh nhu cầu cần 1 code để Đánh dấu x vào cột I, cho những ô ở cột F và G có .Font.Color là màu xanh
(chú thích thêm: là việc bôi màu xanh cho các ô ở cột F và G được thực hiện ở thao tác chọn Font màu trên Tab Home của Excel)
Về tư duy để code cho việc này thì khá rõ ràng:
Bước 1. Tìm dòng cuối của bảng tính
Bước 2. Chạy từ dòng đầu tới dòng cuối bằng For ...to
Bước 3. Đặt điều kiện trong vòng lặp là If Cells (i,6) có màu xanh thì Cell(i,9).Value = "x"
Vấn đề cần xử lý ở code này là xác định các ô có màu xanh. Làm thế nào để code xác định được ô có màu xanh??
Để trả lời câu hỏi này. Như 1 thói quen , tôi sử dụng Record Macro cho thao tác bôi màu xanh cho ô A1. Và code của việc record macro cho kết quả như sau:
Như các bạn thấy, record macro đã cho ra kết quả của việc bôi màu xanh ô A1. Dựa vào kết quả của code tôi đã suy luận rằng các ô màu xanh là các ô có .Font.Color = -1003520.
Từ suy luận này tôi đã đưa vào code của mình như sau:
Code trên hòan toàn mạch lạc về tư duy như tôi đã nêu ở trên. Tuy nhiên thực tế là code không hề cho ra kết quả mặc dù code có chạy và không báo lỗi
Từ đây tôi rút ra 1 kết luận là việc copy các code trong Record Macro để sử dụng đôi khi không đúng với 1 vài tính huống.
Cảm ơn các bạn đã đọc và mong nhận được các ý kiến, thắc mắc hoặc giải thích thêm về bài của tôi. Để từ đó chúng ta có được những bài học bổ ích hơn khi làm việc với VBA
Với những người tự học VBA thì việc đọc và sao chép code của chức năng Record Macro là điều không có gì xa lạ. (Đó gần như là 1 kỹ năng cần phải có khi tự học VBA)
Tuy nhiên đôi khi code trong Record Macro lại không cho ta kết quả như ý khi áp dụng vào 1 vấn đề tương tự
Và tôi xin chia sẻ với các bạn 1 tình huống như sau:
Hôm trước trong lúc làm việc tôi phát sinh nhu cầu cần 1 code để Đánh dấu x vào cột I, cho những ô ở cột F và G có .Font.Color là màu xanh
(chú thích thêm: là việc bôi màu xanh cho các ô ở cột F và G được thực hiện ở thao tác chọn Font màu trên Tab Home của Excel)
Về tư duy để code cho việc này thì khá rõ ràng:
Bước 1. Tìm dòng cuối của bảng tính
Bước 2. Chạy từ dòng đầu tới dòng cuối bằng For ...to
Bước 3. Đặt điều kiện trong vòng lặp là If Cells (i,6) có màu xanh thì Cell(i,9).Value = "x"
Vấn đề cần xử lý ở code này là xác định các ô có màu xanh. Làm thế nào để code xác định được ô có màu xanh??
Để trả lời câu hỏi này. Như 1 thói quen , tôi sử dụng Record Macro cho thao tác bôi màu xanh cho ô A1. Và code của việc record macro cho kết quả như sau:
Mã:
Range("A1").Select
With Selection.Font
.Color = -1003520
.TintAndShade = 0
End With
Từ suy luận này tôi đã đưa vào code của mình như sau:
Mã:
Sub danhdaux()
Dim lr As Long
With Sheets("test")
Sheets("test").Select
lr = .Cells(.Rows.Count, "A").End(xlUp).Row
For i = 1 To lr
If Cells(i, 6).Font.Color = -1003520 Or _
Cells(i, 7).Font.Color = -1003520 Then
Cells(i, 9).Value = "x"
End If
Next i
End With
End Sub
Từ đây tôi rút ra 1 kết luận là việc copy các code trong Record Macro để sử dụng đôi khi không đúng với 1 vài tính huống.
Cảm ơn các bạn đã đọc và mong nhận được các ý kiến, thắc mắc hoặc giải thích thêm về bài của tôi. Để từ đó chúng ta có được những bài học bổ ích hơn khi làm việc với VBA
Sửa lần cuối: