Kích hoạt Worksheet Change khi giá trị cell thay đổi theo hàm Excel
Chào cac bạn
Rất mong nhận được sự hỗ trợ của các bạn với vấn đề sau.
Như trong file đính kèm, tôi dùng code dưới đây để ghi lại thời gian trong cột D (Sheet 1) khi giá trị dòng tương ứng ở cột C hiển thị (bất kỳ giá trị nào), và khi xóa giá trị ở cột C thì thời gian hiển thị trên cột D dòng tương ứng cũng tự delete.
Giá trị thời gian này sẽ không thay đổi.Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Range("C2:C1000"), Range(Target.Address)) Is Nothing Then If Range("C" & Target.Row).Value = "" Then Range("D" & Target.Row).ClearContents Else Range("D" & Target.Row).Value = Time End If End If End SubVấn đề của tôi là giá trị (bất kỳ) ở cột C được thiết lập theo giá trị nhập vào ở một trang khác, trong file đính kèm là Sheet 2, cột A, dòng tương ứng.
Khi nhập giá trị vào cột A Sheet 2 thì giá trị ở cột C Sheet 1 dòng tương ứng sẽ hiển thị.
Tuy nhiên, khi giá trị ở cột C hiển thị thì thời gian không hiển thị trên cột D. Giá trị thời gian trên cột D chỉ có thể hiển thị (hoăc tự delete) khi cần phải nhấn Enter cho hàm Excel với giá trị trên cột C.Rất mong nhận được sự hỗ trợ của các bạn để code VBA trện có thể kích hoạt ngay khi tôi nhập liệu vào cột A của Sheet 2.
Tôi cũng xin lỗi nếu như việc trình bày không được rõ ràng cho các bạn.Còn cái này đối với mình thì nó là lâng cao. :wallbash: :wallbash: :wallbash:
Vẫn phải trong sheet2, mục đích là xóa nhiều dòng A thì bên Sheet 1 sẽ xóa nhiều dòng D. Code thì chạy nhưng mình chả hiểu tại sao nó chạy được. :wallbash::wallbash::wallbash:Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Range("A:A"), Range(Target.Address)) Is Nothing Then If WorksheetFunction.CountA(Sheet2.Range(Target.Address)) = 0 Then Sheet1.Range(Target.Address).Offset(, 3).ClearContents Else Sheet1.Range(Target.Address).Offset(, 3).Value = Time End If End If End Sub
Mình tạm thời chưa có thời gian. Bạn nào thử giùm:
Thử application.undo bên trong calculate event, để lấy giá trị cũ trong cột C, và so sánh với giá trị sau calculate trong cột C. Nếu khác thì cập nhật cột D.
Đừng quên tắt application.enableEvents trước khi Undo rồi mở lại.
Đại khái thế này:
Tại sheet1:
Private Sub Worksheet_Calculate()
Dim oldRng, newRng
newRng = Range("C8:C1000").Value
With Application
.EnableEvents = False
.Undo
oldRng = Range("C8:C10").Value
.EnableEvents = True
End With
'Sau đó duyệt 2 mảng old và new để tìm ra ô nào thay đổi và điền thời gian vô
End Sub
www.giaiphapexcel.com/diendan/threads/k%C3%ADch-ho%E1%BA%A1t-worksheet-change-khi-gi%C3%A1-tr%E1%BB%8B-cell-thay-%C4%91%E1%BB%95i-theo-h%C3%A0m-excel.163270/post-1089163
Kỹ năng giải quyết vấn đề hiệu quả
Mô tả Nội dung Đánh giá Tài nguyên KỸ NĂNG GIẢI QUYẾT VẤN ĐỀ HIỆU QUẢHiểu đúng vấn đề là một nửa của giải...
Xem khóa học
Bình luận